diff options
Diffstat (limited to 'src/boost/libs/config/test/boost_no_constexpr.ipp')
-rw-r--r-- | src/boost/libs/config/test/boost_no_constexpr.ipp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/boost/libs/config/test/boost_no_constexpr.ipp b/src/boost/libs/config/test/boost_no_constexpr.ipp new file mode 100644 index 00000000..1f3a96ee --- /dev/null +++ b/src/boost/libs/config/test/boost_no_constexpr.ipp @@ -0,0 +1,88 @@ +// (C) Copyright Beman Dawes 2008 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_CXX11_CONSTEXPR +// TITLE: C++0x constexpr unavailable +// DESCRIPTION: The compiler does not support C++0x constexpr + +namespace boost_no_cxx11_constexpr { + +void quiet_warning(int){} + +constexpr int square(int x) { return x * x; } // from N2235 + +// from 5.19: +constexpr const int* addr(const int& ir) { return &ir; } +static const int x = 5; +constexpr const int* xp = addr(x); + +struct A +{ + constexpr A(int i) : val(i) { } + constexpr operator int()const { return val; } + constexpr operator long()const { return 43; } +private: + int val; +}; + +template<int> struct X { }; + +constexpr const A a = 42; + +X<a> xx; // OK: unique conversion to int + +// virtual function +struct B +{ + virtual void vf() {} +}; +struct C : B +{ + constexpr C() {} +}; + +// aggregate initialization +struct D +{ + int val[2]; + constexpr D() : val() {} +}; + +// virtual base +struct E +{ +}; +struct F : virtual E +{ +}; +constexpr F& f(F& out) { return out; } + +namespace whatever{}; + +constexpr int factorial(int i) +{ + typedef int value_type; + using namespace whatever; + return i <= 1 ? 1 : i * factorial(value_type(i-1)); +} + +int test() +{ + constexpr int i = square(5) + factorial(10); + quiet_warning(i); + + switch (i) + { + case a: + break; + } + + return 0; +} + +} |