1 // Copyright (C) 2014 Andrzej Krzemienski. 2 // 3 // Use, modification, and distribution is subject to the Boost Software 4 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 // 7 // See http://www.boost.org/lib/optional for documentation. 8 // 9 // You are welcome to contact the author at: 10 // [email protected] 11 12 #include "boost/optional/optional.hpp" 13 14 #ifdef BOOST_BORLANDC 15 #pragma hdrstop 16 #endif 17 18 #include "boost/core/lightweight_test.hpp" 19 #include "boost/none.hpp" 20 21 //#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR 22 23 using boost::optional; 24 using boost::none; 25 26 template <typename U> 27 struct superconv 28 { 29 #ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES 30 template <typename T> superconvsuperconv31 superconv(T&&) { BOOST_STATIC_ASSERT(sizeof(T) == 0); } 32 #else 33 template <typename T> 34 superconv(const T&) { BOOST_STATIC_ASSERT(sizeof(T) == 0); } 35 template <typename T> 36 superconv( T&) { BOOST_STATIC_ASSERT(sizeof(T) == 0); } 37 #endif 38 superconvsuperconv39 superconv() {} 40 }; 41 test_optional_of_superconverting_T()42void test_optional_of_superconverting_T() // compile-time test 43 { 44 #ifndef BOOST_OPTIONAL_DETAIL_NO_IS_CONSTRUCTIBLE_TRAIT 45 superconv<optional<int> > s; 46 superconv<optional<int> > & rs = s; 47 optional<superconv<optional<int> > > os = rs; 48 #endif 49 } 50 test_optional_optional_T()51void test_optional_optional_T() 52 { 53 optional<int> oi1 (1), oiN; 54 optional< optional<int> > ooi1 (oi1), ooiN(oiN); 55 56 BOOST_TEST(ooi1); 57 BOOST_TEST(*ooi1); 58 BOOST_TEST_EQ(**ooi1, 1); 59 60 BOOST_TEST(ooiN); 61 BOOST_TEST(!*ooiN); 62 } 63 main()64int main() 65 { 66 test_optional_optional_T(); 67 test_optional_of_superconverting_T(); 68 69 return boost::report_errors(); 70 } 71