Files
optional/test/optional_test_convert_from_T.cpp

71 lines
1.6 KiB
C++
Raw Permalink Normal View History

2016-05-17 00:54:09 +02:00
// Copyright (C) 2014 Andrzej Krzemienski.
//
// Use, modification, and distribution is 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/lib/optional for documentation.
//
// You are welcome to contact the author at:
// akrzemi1@gmail.com
#include "boost/optional/optional.hpp"
#ifdef BOOST_BORLANDC
2016-05-17 00:54:09 +02:00
#pragma hdrstop
#endif
#include "boost/core/lightweight_test.hpp"
#include "boost/none.hpp"
//#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
using boost::optional;
using boost::none;
2016-11-19 14:57:40 +01:00
template <typename U>
struct superconv
{
#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
template <typename T>
2024-10-16 23:26:44 +02:00
superconv(T&&) { static_assert(sizeof(T) == 0, "ERROR"); }
2016-11-19 14:57:40 +01:00
#else
template <typename T>
2024-10-16 23:26:44 +02:00
superconv(const T&) { static_assert(sizeof(T) == 0, "ERROR"); }
2016-11-19 14:57:40 +01:00
template <typename T>
2024-10-16 23:26:44 +02:00
superconv( T&) { static_assert(sizeof(T) == 0, "ERROR"); }
2016-11-19 14:57:40 +01:00
#endif
2024-10-16 23:26:44 +02:00
2016-11-19 14:57:40 +01:00
superconv() {}
};
void test_optional_of_superconverting_T() // compile-time test
{
2016-11-22 02:35:24 +01:00
#ifndef BOOST_OPTIONAL_DETAIL_NO_IS_CONSTRUCTIBLE_TRAIT
2016-11-19 14:57:40 +01:00
superconv<optional<int> > s;
superconv<optional<int> > & rs = s;
optional<superconv<optional<int> > > os = rs;
2016-11-22 02:35:24 +01:00
#endif
2016-11-19 14:57:40 +01:00
}
2016-05-17 00:54:09 +02:00
void test_optional_optional_T()
{
optional<int> oi1 (1), oiN;
optional< optional<int> > ooi1 (oi1), ooiN(oiN);
2024-10-16 23:26:44 +02:00
2016-05-17 00:54:09 +02:00
BOOST_TEST(ooi1);
BOOST_TEST(*ooi1);
BOOST_TEST_EQ(**ooi1, 1);
2024-10-16 23:26:44 +02:00
2016-05-17 00:54:09 +02:00
BOOST_TEST(ooiN);
BOOST_TEST(!*ooiN);
2024-10-16 23:26:44 +02:00
}
2016-05-17 00:54:09 +02:00
int main()
{
test_optional_optional_T();
2016-11-19 14:57:40 +01:00
test_optional_of_superconverting_T();
2024-10-16 23:26:44 +02:00
2016-05-17 00:54:09 +02:00
return boost::report_errors();
}