1 // 2 // sp_constexpr_test2.cpp 3 // 4 // Copyright 2017 Peter Dimov 5 // 6 // Distributed under the Boost Software License, Version 1.0. 7 // See accompanying file LICENSE_1_0.txt or copy at 8 // http://www.boost.org/LICENSE_1_0.txt 9 // 10 11 #include <boost/config.hpp> 12 #include <boost/config/workaround.hpp> 13 14 #define HAVE_CONSTEXPR_INIT 15 16 #if defined( BOOST_NO_CXX11_CONSTEXPR ) 17 # undef HAVE_CONSTEXPR_INIT 18 #endif 19 20 #if BOOST_WORKAROUND( BOOST_MSVC, < 1930 ) 21 # undef HAVE_CONSTEXPR_INIT 22 #endif 23 24 #if defined(__clang__) && defined( BOOST_NO_CXX14_CONSTEXPR ) 25 # undef HAVE_CONSTEXPR_INIT 26 #endif 27 28 #if !defined( HAVE_CONSTEXPR_INIT ) 29 main()30int main() 31 { 32 } 33 34 #else 35 36 #include <boost/shared_ptr.hpp> 37 #include <boost/weak_ptr.hpp> 38 #include <boost/enable_shared_from_this.hpp> 39 #include <boost/core/lightweight_test.hpp> 40 41 struct X: public boost::enable_shared_from_this<X> 42 { 43 int v_; 44 XX45 constexpr X() BOOST_NOEXCEPT: v_( 1 ) 46 { 47 } 48 }; 49 50 struct Z 51 { 52 Z(); 53 }; 54 55 static Z z; 56 static X x; 57 Z()58Z::Z() 59 { 60 BOOST_TEST_EQ( x.v_, 1 ); 61 } 62 main()63int main() 64 { 65 return boost::report_errors(); 66 } 67 68 #endif // #if defined( BOOST_NO_CXX11_CONSEXPR ) 69