diff options
author | Brad King <brad.king@kitware.com> | 2014-05-29 13:58:37 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2014-05-29 13:58:37 (GMT) |
commit | 1468e986e1874f7c011e74885e4df2fbab65b396 (patch) | |
tree | 333b77c1a92d5d86e803f03019ecd582362eb003 /Tests | |
parent | 9e11fcdc761f441de638b321874aea4d97a72676 (diff) | |
parent | dd043c3f21fbfab17d7f400bd2bc9f927215b18e (diff) | |
download | CMake-1468e986e1874f7c011e74885e4df2fbab65b396.zip CMake-1468e986e1874f7c011e74885e4df2fbab65b396.tar.gz CMake-1468e986e1874f7c011e74885e4df2fbab65b396.tar.bz2 |
Merge topic 'cxx14-features'
dd043c3f Features: Add support for C++14 features.
Diffstat (limited to 'Tests')
-rw-r--r-- | Tests/CompileFeatures/CMakeLists.txt | 15 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_aggregate_default_initializers.cpp | 9 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_attribute_deprecated.cpp | 11 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_binary_literals.cpp | 6 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_contextual_conversions.cpp | 33 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_decltype_auto.cpp | 6 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_digit_separators.cpp | 6 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_generic_lambdas.cpp | 6 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_lambda_init_captures.cpp | 6 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_relaxed_constexpr.cpp | 23 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_return_type_deduction.cpp | 10 | ||||
-rw-r--r-- | Tests/CompileFeatures/cxx_variable_templates.cpp | 10 | ||||
-rw-r--r-- | Tests/SystemInformation/SystemInformation.in | 1 |
13 files changed, 141 insertions, 1 deletions
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt index 7a8a975..d02ddaf 100644 --- a/Tests/CompileFeatures/CMakeLists.txt +++ b/Tests/CompileFeatures/CMakeLists.txt @@ -37,11 +37,24 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL GNU cxx_alignof ) endif() +if (CMAKE_CXX_COMPILER_ID STREQUAL GNU + AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) + # GNU prior to 4.9 does not set any preprocessor define to distinguish + # c++1y from c++11, so CMake does not support c++1y features before GNU 4.9. + list(REMOVE_ITEM CXX_non_features + # GNU 4.8 knows cxx_attributes, but doesn't know [[deprecated]] + # and warns that it is unknown and ignored. + cxx_attribute_deprecated + cxx_binary_literals + cxx_lambda_init_captures + cxx_return_type_deduction + ) +endif() set(C_ext c) set(C_standard_flag 11) set(CXX_ext cpp) -set(CXX_standard_flag 11) +set(CXX_standard_flag 14) foreach(lang CXX C) if (CMAKE_${lang}_COMPILE_FEATURES) foreach(feature ${${lang}_non_features}) diff --git a/Tests/CompileFeatures/cxx_aggregate_default_initializers.cpp b/Tests/CompileFeatures/cxx_aggregate_default_initializers.cpp new file mode 100644 index 0000000..63a3713 --- /dev/null +++ b/Tests/CompileFeatures/cxx_aggregate_default_initializers.cpp @@ -0,0 +1,9 @@ + +struct X { int i, j, k = 42; }; + +int someFunc() +{ + X a[] = { 1, 2, 3, 4, 5, 6 }; + X b[2] = { { 1, 2, 3 }, { 4, 5, 6 } }; + return a[0].k == b[0].k && a[1].k == b[1].k ? 0 : 1; +} diff --git a/Tests/CompileFeatures/cxx_attribute_deprecated.cpp b/Tests/CompileFeatures/cxx_attribute_deprecated.cpp new file mode 100644 index 0000000..b6f307d --- /dev/null +++ b/Tests/CompileFeatures/cxx_attribute_deprecated.cpp @@ -0,0 +1,11 @@ + +[[deprecated]] +int foo() +{ + return 0; +} + +int someFunc() +{ + return foo(); +} diff --git a/Tests/CompileFeatures/cxx_binary_literals.cpp b/Tests/CompileFeatures/cxx_binary_literals.cpp new file mode 100644 index 0000000..14a9e75 --- /dev/null +++ b/Tests/CompileFeatures/cxx_binary_literals.cpp @@ -0,0 +1,6 @@ + +int someFunc() +{ + int i = 0b101; + return i - 5; +} diff --git a/Tests/CompileFeatures/cxx_contextual_conversions.cpp b/Tests/CompileFeatures/cxx_contextual_conversions.cpp new file mode 100644 index 0000000..3438624 --- /dev/null +++ b/Tests/CompileFeatures/cxx_contextual_conversions.cpp @@ -0,0 +1,33 @@ + +#define assert(E) if(!(E)) return 1; + +template<class T> +class zero_init +{ +public: + zero_init( ) + : val( static_cast<T>(0) ) { } + zero_init( T val ) : val( val ) + { } + operator T & ( ) { return val; } + operator T ( ) const { return val; } +private: + T val; +}; + +int someFunc() +{ + zero_init<int*> p; assert( p == 0 ); + p = new int(7); + assert( *p == 7 ); + delete p; + + zero_init<int> i; assert( i == 0 ); + i = 7; + assert( i == 7 ); + switch( i ) { } + + int *vp = new int[i]; + + return 0; +} diff --git a/Tests/CompileFeatures/cxx_decltype_auto.cpp b/Tests/CompileFeatures/cxx_decltype_auto.cpp new file mode 100644 index 0000000..900bb6d --- /dev/null +++ b/Tests/CompileFeatures/cxx_decltype_auto.cpp @@ -0,0 +1,6 @@ + +int someFunc(int argc, char**) +{ + decltype(auto) i = argc; + return 0; +} diff --git a/Tests/CompileFeatures/cxx_digit_separators.cpp b/Tests/CompileFeatures/cxx_digit_separators.cpp new file mode 100644 index 0000000..abcd1c8 --- /dev/null +++ b/Tests/CompileFeatures/cxx_digit_separators.cpp @@ -0,0 +1,6 @@ + +int someFunc() +{ + int one_thousand = 1'000; + return one_thousand - 1000; +} diff --git a/Tests/CompileFeatures/cxx_generic_lambdas.cpp b/Tests/CompileFeatures/cxx_generic_lambdas.cpp new file mode 100644 index 0000000..ae1b78e --- /dev/null +++ b/Tests/CompileFeatures/cxx_generic_lambdas.cpp @@ -0,0 +1,6 @@ + +int someFunc() +{ + auto identity = [](auto a) { return a; }; + return identity(0); +} diff --git a/Tests/CompileFeatures/cxx_lambda_init_captures.cpp b/Tests/CompileFeatures/cxx_lambda_init_captures.cpp new file mode 100644 index 0000000..7e337fa --- /dev/null +++ b/Tests/CompileFeatures/cxx_lambda_init_captures.cpp @@ -0,0 +1,6 @@ + +int someFunc() +{ + int a = 0; + return [b = static_cast<int&&>(a)]() { return b; }(); +} diff --git a/Tests/CompileFeatures/cxx_relaxed_constexpr.cpp b/Tests/CompileFeatures/cxx_relaxed_constexpr.cpp new file mode 100644 index 0000000..bce82e3 --- /dev/null +++ b/Tests/CompileFeatures/cxx_relaxed_constexpr.cpp @@ -0,0 +1,23 @@ + +struct X { + constexpr X() : n(5) { + n *= 2; + } + int n; +}; + +constexpr int g(const int (&is)[4]) { + X x; + int r = x.n; + for (int i = 0; i < 5; ++i) + r += i; + for (auto& i : is) + r += i; + return r; +} + +int someFunc() +{ + constexpr int k3 = g({ 4, 5, 6, 7 }); + return k3 - 42; +} diff --git a/Tests/CompileFeatures/cxx_return_type_deduction.cpp b/Tests/CompileFeatures/cxx_return_type_deduction.cpp new file mode 100644 index 0000000..009e919 --- /dev/null +++ b/Tests/CompileFeatures/cxx_return_type_deduction.cpp @@ -0,0 +1,10 @@ + +auto sum(int a, int b) +{ + return a+b; +} + +int someFunc() +{ + return sum(3, -3); +} diff --git a/Tests/CompileFeatures/cxx_variable_templates.cpp b/Tests/CompileFeatures/cxx_variable_templates.cpp new file mode 100644 index 0000000..5d4bdbc --- /dev/null +++ b/Tests/CompileFeatures/cxx_variable_templates.cpp @@ -0,0 +1,10 @@ + +template<typename T> +constexpr T pi = T(3.1415926535897932385); + +int someFunc() +{ + auto pi_int = pi<int>; + auto pi_float = pi<float>; + return pi_int - 3; +} diff --git a/Tests/SystemInformation/SystemInformation.in b/Tests/SystemInformation/SystemInformation.in index 7e1ee24..f7e81e6 100644 --- a/Tests/SystemInformation/SystemInformation.in +++ b/Tests/SystemInformation/SystemInformation.in @@ -38,6 +38,7 @@ CMAKE_CXX11_EXTENSION_COMPILE_OPTION == "${CMAKE_CXX11_EXTENSION_COMPILE_OPTION} CMAKE_CXX_COMPILE_FEATURES == "${CMAKE_CXX_COMPILE_FEATURES}" CMAKE_CXX98_COMPILE_FEATURES == "${CMAKE_CXX98_COMPILE_FEATURES}" CMAKE_CXX11_COMPILE_FEATURES == "${CMAKE_CXX11_COMPILE_FEATURES}" +CMAKE_CXX14_COMPILE_FEATURES == "${CMAKE_CXX14_COMPILE_FEATURES}" // C shared library flag CMAKE_SHARED_LIBRARY_C_FLAGS == "${CMAKE_SHARED_LIBRARY_C_FLAGS}" |