bolero-MURAKAMI / Sprout

C++11/14 constexpr based Containers, Algorithms, Random numbers, Parsing, Ray tracing, Synthesizer, and others.

Home Page:http://bolero-murakami.github.io/Sprout/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Visual Studio 2015およびVIsual Studio 2013 November CTP対応

yumetodo opened this issue · comments

sprout/config/compiler/visualc.hpp

で現状constexprnoexceptが無効化されていますが、noexceptはVIsual Studio 2013 November CTPから、C++11のconstexprはVisual Studio 2015から対応しているように思います。ついでにC++11の他の機能への対応をまとめると

  • Visual Studio 2015より対応
    • C++11constexpr
    • User-defined literals
    • Unicode string literals
  • VIsual Studio 2013 November CTPより対応
    • classのdefault指定
    • noexcept
  • VIsual Studio 2013 より対応
    • classのdelete指定
    • template aliases
    • Delegating constructors

なので

#define SPROUT_NO_CXX11_CONSTEXPR
#define SPROUT_NO_CXX11_DEFAULTED_FUNCTIONS
#define SPROUT_NO_CXX11_DELETED_FUNCTIONS
#if _MSC_FULL_VER < 170051025 || !defined(SPROUT_MSVC_ENABLE_2012_NOV_CTP)
#   define SPROUT_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
#endif
#define SPROUT_NO_CXX11_NOEXCEPT
#define SPROUT_NO_CXX11_TEMPLATE_ALIASES
#define SPROUT_NO_CXX11_USER_DEFINED_LITERALS
#define SPROUT_NO_CXX11_DELEGATING_CONSTRUCTORS
#define SPROUT_NO_CXX11_UNICODE_LITERALS

#if _MSC_VER < 1900
#define SPROUT_NO_CXX11_CONSTEXPR
#define SPROUT_NO_CXX11_USER_DEFINED_LITERALS
#define SPROUT_NO_CXX11_UNICODE_LITERALS
#endif //_MSC_VER < 1900

#if _MSC_FULL_VER < 180031101
#define SPROUT_NO_CXX11_DEFAULTED_FUNCTIONS
#define SPROUT_NO_CXX11_NOEXCEPT
#endif //_MSC_FULL_VER < 180031101

#if _MSC_VER < 1800
#define SPROUT_NO_CXX11_DELETED_FUNCTIONS
#define SPROUT_NO_CXX11_TEMPLATE_ALIASES
#define SPROUT_NO_CXX11_DELEGATING_CONSTRUCTORS
#endif //_MSC_VER < 1800

#if _MSC_FULL_VER < 170051025 || !defined(SPROUT_MSVC_ENABLE_2012_NOV_CTP)
#   define SPROUT_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
#endif
#define SPROUT_NO_CXX11_ATTRIBUTES

のほうが適当だと思うのですが、どうなんでしょうか?

ありがとうございます。Boost1.59 の config とも見比べながら更新しました。
74669a5

C++11 constexpr については、対応が怪しいようなのでまだ無効にしてあります。

更新お疲れ様です。
constexpr delegating constructorと標準ライブラリのconstexpr対応以外にも怪しい所があったとは知らなかったです。

e7a79b3
SPROUT_CONSTEXPR_OR_CONST, SPROUT_STATIC_CONSTEXPRSPROUT_NO_STATIC_CONSTEXPR_INITIALIZATIONによって制御されるようになりましたが、なにかバグでもありましたでしょうか?

その更新では、
VC++2015 において関数のconstexpr指定を有効にしましたが、
costexpr指定された変数(定数)を非整数型の定数式で初期化できなかったのでそのような初期化を無効にしました。
http://melpon.org/wandbox/permlink/VyJhAkRrF0iQYnqP

@bolero-MURAKAMI 手元のVS(_MSC_FULL_VER == 190023506)では普通に通るんですが・・・