summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/config/test/boost_no_constexpr.ipp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/config/test/boost_no_constexpr.ipp')
-rw-r--r--src/boost/libs/config/test/boost_no_constexpr.ipp88
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;
+}
+
+}