Difference between revisions of "Used C++11 features"
From KlayGE
Gongminmin (Talk | contribs) |
Gongminmin (Talk | contribs) |
||
Line 5: | Line 5: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! Language Feature !! Macro !! MSVC !! GCC !! Alternative | + | ! Language Feature !! Macro !! MSVC !! GCC !! Clang !! Alternative |
|- | |- | ||
− | | Allowing move constructors to throw [noexcept] || KLAYGE_CXX11_CORE_NOEXCEPT_SUPPORT || {{Yes}}14.0 || {{Yes}}4.6 || throw() | + | | Allowing move constructors to throw [noexcept] || KLAYGE_CXX11_CORE_NOEXCEPT_SUPPORT || {{Yes}}14.0 || {{Yes}}4.6 || {{Yes}}3.0 || throw() |
|- | |- | ||
− | | Declared type of an expression || KLAYGE_CXX11_CORE_DECLTYPE_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || Boost.Typeof | + | | Declared type of an expression || KLAYGE_CXX11_CORE_DECLTYPE_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}2.9 || Boost.Typeof |
|- | |- | ||
− | | Extern templates || KLAYGE_CXX11_CORE_EXTERN_TEMPLATES_SUPPORT || {{Yes}}9.0 || {{Yes}}4.3 || | + | | Extern templates || KLAYGE_CXX11_CORE_EXTERN_TEMPLATES_SUPPORT || {{Yes}}9.0 || {{Yes}}4.3 || {{Yes}}2.9 || |
|- | |- | ||
− | | Explicit virtual overrides || KLAYGE_CXX11_CORE_OVERRIDE_SUPPORT || {{Yes}}11.0 || {{Yes}}4.7 || #define | + | | Explicit virtual overrides || KLAYGE_CXX11_CORE_OVERRIDE_SUPPORT || {{Yes}}11.0 || {{Yes}}4.7 || {{Yes}}3.0 || #define |
|- | |- | ||
− | | Generalized constant expressions || KLAYGE_CXX11_CORE_CONSTEXPR_SUPPORT || {{No}}No || {{Yes}}4.6 || | + | | Generalized constant expressions || KLAYGE_CXX11_CORE_CONSTEXPR_SUPPORT || {{No}}No || {{Yes}}4.6 || {{Yes}}3.1 || |
|- | |- | ||
− | | Null pointer constant || KLAYGE_CXX11_CORE_NULLPTR_SUPPORT || {{Yes}}10.0 || {{Yes}}4.6 || Self-implemented null_ptr | + | | Null pointer constant || KLAYGE_CXX11_CORE_NULLPTR_SUPPORT || {{Yes}}10.0 || {{Yes}}4.6 || {{Yes}}3.0 || Self-implemented null_ptr |
|- | |- | ||
− | | Range-based for || KLAYGE_CXX11_CORE_FOREACH_SUPPORT || {{Yes}}11.0 || {{Yes}}4.6 || Boost.Foreach | + | | Range-based for || KLAYGE_CXX11_CORE_FOREACH_SUPPORT || {{Yes}}11.0 || {{Yes}}4.6 || {{Yes}}3.0 || Boost.Foreach |
|- | |- | ||
− | | Rvalue references || KLAYGE_CXX11_CORE_RVALUE_REFERENCES_SUPPORT || {{Yes}} | + | | Rvalue references || KLAYGE_CXX11_CORE_RVALUE_REFERENCES_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}2.9 || Boost.Move |
|- | |- | ||
− | | Static assertions || KLAYGE_CXX11_CORE_STATIC_ASSERT_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || Boost.StaticAssert | + | | Static assertions || KLAYGE_CXX11_CORE_STATIC_ASSERT_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}2.9 || Boost.StaticAssert |
|- | |- | ||
− | | Strongly-typed enums || KLAYGE_CXX11_CORE_STRONGLY_TYPED_ENUMS_SUPPORT || {{Yes}}11.0 || {{Yes}}4.4 || C++98 enum | + | | Strongly-typed enums || KLAYGE_CXX11_CORE_STRONGLY_TYPED_ENUMS_SUPPORT || {{Yes}}11.0 || {{Yes}}3.0 || {{Yes}}4.4 || {{Yes}}2.9 || C++98 enum |
|- | |- | ||
− | | Variadic templates || KLAYGE_CXX11_CORE_VARIADIC_TEMPLATES || {{Yes}}12.0 || {{Yes}}4.3 || | + | | Variadic templates || KLAYGE_CXX11_CORE_VARIADIC_TEMPLATES || {{Yes}}12.0 || {{Yes}}4.3 || {{Yes}}2.9 || |
|} | |} | ||
Line 38: | Line 38: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! Name !! Macro !! MSVC !! GCC !! Alternative | + | ! Name !! Macro !! MSVC !! GCC !! Clang !! Alternative |
|- | |- | ||
− | | algorithm (only copy_if) || KLAYGE_CXX11_LIBRARY_ALGORITHM_SUPPORT || {{Yes}}11.0 || {{Yes}}4.3 || Self-implemented copy_if | + | | algorithm (only copy_if) || KLAYGE_CXX11_LIBRARY_ALGORITHM_SUPPORT || {{Yes}}11.0 || {{Yes}}4.3 || {{Yes}}3.0 || Self-implemented copy_if |
|- | |- | ||
− | | array || KLAYGE_CXX11_LIBRARY_ARRAY_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || Boost.Array | + | | array || KLAYGE_CXX11_LIBRARY_ARRAY_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Array |
|- | |- | ||
− | | atomic || KLAYGE_CXX11_LIBRARY_ATOMIC_SUPPORT || {{Yes}}11.0 || {{Yes}}4.4 || Boost.Atomic | + | | atomic || KLAYGE_CXX11_LIBRARY_ATOMIC_SUPPORT || {{Yes}}11.0 || {{Yes}}4.4 || {{Yes}}3.0 || Boost.Atomic |
|- | |- | ||
− | | chrono || KLAYGE_CXX11_LIBRARY_CHRONO_SUPPORT || {{Yes}}11.0 || {{Yes}}4.4 (Must have _GLIBCXX_HAS_GTHREADS) || Boost.Chrono | + | | chrono || KLAYGE_CXX11_LIBRARY_CHRONO_SUPPORT || {{Yes}}11.0 || {{Yes}}4.4 (Must have _GLIBCXX_HAS_GTHREADS) || {{Yes}}3.0 || Boost.Chrono |
|- | |- | ||
− | | cstdint || KLAYGE_CXX11_LIBRARY_CSTDINT_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || Boost.Integer | + | | cstdint || KLAYGE_CXX11_LIBRARY_CSTDINT_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Integer |
|- | |- | ||
− | | functional || KLAYGE_CXX11_LIBRARY_FUNCTIONAL_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || Boost.Functional | + | | functional || KLAYGE_CXX11_LIBRARY_FUNCTIONAL_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Functional |
|- | |- | ||
− | | mem_fn || KLAYGE_CXX11_LIBRARY_MEM_FN_SUPPORT || {{Yes}}12.0 || {{No}}No || Boost.MemFn | + | | mem_fn || KLAYGE_CXX11_LIBRARY_MEM_FN_SUPPORT || {{Yes}}12.0 || {{No}}No || {{Yes}}3.0 || Boost.MemFn |
|- | |- | ||
− | | random || KLAYGE_CXX11_LIBRARY_RANDOM_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || Boost.Random | + | | random || KLAYGE_CXX11_LIBRARY_RANDOM_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Random |
|- | |- | ||
− | | regex || KLAYGE_CXX11_LIBRARY_REGEX_SUPPORT || {{Yes}}10.0 || {{Yes}}4.9 || Boost.Regex | + | | regex || KLAYGE_CXX11_LIBRARY_REGEX_SUPPORT || {{Yes}}10.0 || {{Yes}}4.9 || {{Yes}}3.0 || Boost.Regex |
|- | |- | ||
− | | smart_ptr || KLAYGE_CXX11_LIBRARY_SMART_PTR_SUPPORT || {{Yes}}11.0 || {{Yes}}4.3 || Boost.SmartPtr | + | | smart_ptr || KLAYGE_CXX11_LIBRARY_SMART_PTR_SUPPORT || {{Yes}}11.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.SmartPtr |
|- | |- | ||
− | | system_error || KLAYGE_CXX11_LIBRARY_SYSTEM_ERROR_SUPPORT || {{Yes}}10.0 || {{Yes}}4.4 || Boost.System | + | | system_error || KLAYGE_CXX11_LIBRARY_SYSTEM_ERROR_SUPPORT || {{Yes}}10.0 || {{Yes}}4.4 || {{Yes}}3.0 || Boost.System |
|- | |- | ||
− | | thread || KLAYGE_CXX11_LIBRARY_THREAD_SUPPORT || {{Yes}}11.0 || {{Yes}}4.4 (Must have _GLIBCXX_HAS_GTHREADS) || Boost.Thread | + | | thread || KLAYGE_CXX11_LIBRARY_THREAD_SUPPORT || {{Yes}}11.0 || {{Yes}}4.4 (Must have _GLIBCXX_HAS_GTHREADS) || {{Yes}}3.0 || Boost.Thread |
|- | |- | ||
− | | tuple || KLAYGE_CXX11_LIBRARY_TUPLE_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || Boost.Tuple | + | | tuple || KLAYGE_CXX11_LIBRARY_TUPLE_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Tuple |
|- | |- | ||
− | | type_traits || KLAYGE_CXX11_LIBRARY_TYPE_TRAITS_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || Boost.TypeTraits | + | | type_traits || KLAYGE_CXX11_LIBRARY_TYPE_TRAITS_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.TypeTraits |
|- | |- | ||
− | | unordered || KLAYGE_CXX11_LIBRARY_UNORDERED_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || Boost.Unordered | + | | unordered || KLAYGE_CXX11_LIBRARY_UNORDERED_SUPPORT || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Unordered |
|} | |} | ||
− | == | + | == TS == |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! Name !! Macro !! MSVC !! GCC !! Alternative | + | ! Name !! Macro !! MSVC !! GCC !! Clang !! Alternative |
|- | |- | ||
− | | filesystem || | + | | filesystem || KLAYGE_TS_LIBRARY_FILESYSTEM_V2_SUPPORT || {{Yes}}11.0 || {{No}}No || {{No}}No || Boost.FileSystem |
|- | |- | ||
− | | filesystem || | + | | filesystem || KLAYGE_TS_LIBRARY_FILESYSTEM_V3_SUPPORT || {{Yes}}14.0 || {{No}}No || {{No}}No || Boost.FileSystem |
+ | |- | ||
+ | | optional || KLAYGE_TS_LIBRARY_OPTIONAL_SUPPORT || {{No}}No || {{Yes}}4.9 || {{No}}No || Boost.Optional | ||
+ | |- | ||
+ | | any || KLAYGE_TS_LIBRARY_ANY_SUPPORT || {{No}}No || {{No}}No || {{No}}No || Boost.Any | ||
|} | |} | ||
Revision as of 23:07, 4 July 2015
Starting from KlayGE 4.2, some C++11 features are introduced to replace some features from Boost. KFL defines some macros based on compiler names and versions, to ensure which features are useable. Those macros are defined in KFL/Config.hpp.
Contents
C++11 Core Language Features
Language Feature | Macro | MSVC | GCC | Clang | Alternative | |
---|---|---|---|---|---|---|
Allowing move constructors to throw [noexcept] | KLAYGE_CXX11_CORE_NOEXCEPT_SUPPORT | 14.0 | 4.6 | 3.0 | throw() | |
Declared type of an expression | KLAYGE_CXX11_CORE_DECLTYPE_SUPPORT | 10.0 | 4.3 | 2.9 | Boost.Typeof | |
Extern templates | KLAYGE_CXX11_CORE_EXTERN_TEMPLATES_SUPPORT | 9.0 | 4.3 | 2.9 | ||
Explicit virtual overrides | KLAYGE_CXX11_CORE_OVERRIDE_SUPPORT | 11.0 | 4.7 | 3.0 | #define | |
Generalized constant expressions | KLAYGE_CXX11_CORE_CONSTEXPR_SUPPORT | No | 4.6 | 3.1 | ||
Null pointer constant | KLAYGE_CXX11_CORE_NULLPTR_SUPPORT | 10.0 | 4.6 | 3.0 | Self-implemented null_ptr | |
Range-based for | KLAYGE_CXX11_CORE_FOREACH_SUPPORT | 11.0 | 4.6 | 3.0 | Boost.Foreach | |
Rvalue references | KLAYGE_CXX11_CORE_RVALUE_REFERENCES_SUPPORT | 10.0 | 4.3 | 2.9 | Boost.Move | |
Static assertions | KLAYGE_CXX11_CORE_STATIC_ASSERT_SUPPORT | 10.0 | 4.3 | 2.9 | Boost.StaticAssert | |
Strongly-typed enums | KLAYGE_CXX11_CORE_STRONGLY_TYPED_ENUMS_SUPPORT | 11.0 | 3.0 | 4.4 | 2.9 | C++98 enum |
Variadic templates | KLAYGE_CXX11_CORE_VARIADIC_TEMPLATES | 12.0 | 4.3 | 2.9 |
C++11 Core Language Features: Concurrency
C++11 Core Language Features: C99
C++11 Libraries
Name | Macro | MSVC | GCC | Clang | Alternative |
---|---|---|---|---|---|
algorithm (only copy_if) | KLAYGE_CXX11_LIBRARY_ALGORITHM_SUPPORT | 11.0 | 4.3 | 3.0 | Self-implemented copy_if |
array | KLAYGE_CXX11_LIBRARY_ARRAY_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Array |
atomic | KLAYGE_CXX11_LIBRARY_ATOMIC_SUPPORT | 11.0 | 4.4 | 3.0 | Boost.Atomic |
chrono | KLAYGE_CXX11_LIBRARY_CHRONO_SUPPORT | 11.0 | 4.4 (Must have _GLIBCXX_HAS_GTHREADS) | 3.0 | Boost.Chrono |
cstdint | KLAYGE_CXX11_LIBRARY_CSTDINT_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Integer |
functional | KLAYGE_CXX11_LIBRARY_FUNCTIONAL_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Functional |
mem_fn | KLAYGE_CXX11_LIBRARY_MEM_FN_SUPPORT | 12.0 | No | 3.0 | Boost.MemFn |
random | KLAYGE_CXX11_LIBRARY_RANDOM_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Random |
regex | KLAYGE_CXX11_LIBRARY_REGEX_SUPPORT | 10.0 | 4.9 | 3.0 | Boost.Regex |
smart_ptr | KLAYGE_CXX11_LIBRARY_SMART_PTR_SUPPORT | 11.0 | 4.3 | 3.0 | Boost.SmartPtr |
system_error | KLAYGE_CXX11_LIBRARY_SYSTEM_ERROR_SUPPORT | 10.0 | 4.4 | 3.0 | Boost.System |
thread | KLAYGE_CXX11_LIBRARY_THREAD_SUPPORT | 11.0 | 4.4 (Must have _GLIBCXX_HAS_GTHREADS) | 3.0 | Boost.Thread |
tuple | KLAYGE_CXX11_LIBRARY_TUPLE_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Tuple |
type_traits | KLAYGE_CXX11_LIBRARY_TYPE_TRAITS_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.TypeTraits |
unordered | KLAYGE_CXX11_LIBRARY_UNORDERED_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Unordered |
TS
Name | Macro | MSVC | GCC | Clang | Alternative |
---|---|---|---|---|---|
filesystem | KLAYGE_TS_LIBRARY_FILESYSTEM_V2_SUPPORT | 11.0 | No | No | Boost.FileSystem |
filesystem | KLAYGE_TS_LIBRARY_FILESYSTEM_V3_SUPPORT | 14.0 | No | No | Boost.FileSystem |
optional | KLAYGE_TS_LIBRARY_OPTIONAL_SUPPORT | No | 4.9 | No | Boost.Optional |
any | KLAYGE_TS_LIBRARY_ANY_SUPPORT | No | No | No | Boost.Any |