97 lines
3.5 KiB
C++
97 lines
3.5 KiB
C++
/*=============================================================================
|
|
Copyright (c) 2018 Kohei Takahashi
|
|
|
|
Distributed under 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)
|
|
==============================================================================*/
|
|
|
|
#include <boost/config.hpp>
|
|
#include <boost/fusion/support/unused.hpp>
|
|
#include <boost/type_traits/detail/yes_no_type.hpp>
|
|
#include <boost/static_assert.hpp>
|
|
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
|
#include <utility>
|
|
#endif
|
|
|
|
struct T { };
|
|
|
|
void unused_construction()
|
|
{
|
|
boost::fusion::unused_type dephault;
|
|
|
|
boost::fusion::unused_type BOOST_ATTRIBUTE_UNUSED parenthesis = boost::fusion::unused_type();
|
|
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
|
boost::fusion::unused_type BOOST_ATTRIBUTE_UNUSED brace{};
|
|
boost::fusion::unused_type BOOST_ATTRIBUTE_UNUSED list_copy = {};
|
|
#endif
|
|
|
|
boost::fusion::unused_type copy_copy BOOST_ATTRIBUTE_UNUSED = dephault;
|
|
boost::fusion::unused_type copy_direct BOOST_ATTRIBUTE_UNUSED (dephault);
|
|
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
|
boost::fusion::unused_type copy_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {dephault};
|
|
boost::fusion::unused_type copy_direct_brace BOOST_ATTRIBUTE_UNUSED {dephault};
|
|
#endif
|
|
|
|
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
|
boost::fusion::unused_type move_copy BOOST_ATTRIBUTE_UNUSED = std::move(dephault);
|
|
boost::fusion::unused_type move_direct BOOST_ATTRIBUTE_UNUSED (std::move(dephault));
|
|
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
|
boost::fusion::unused_type move_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {std::move(dephault)};
|
|
boost::fusion::unused_type move_direct_brace BOOST_ATTRIBUTE_UNUSED {std::move(dephault)};
|
|
#endif
|
|
#endif
|
|
|
|
|
|
T value;
|
|
|
|
boost::fusion::unused_type T_copy_copy BOOST_ATTRIBUTE_UNUSED = value;
|
|
boost::fusion::unused_type T_copy_direct BOOST_ATTRIBUTE_UNUSED (value);
|
|
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
|
boost::fusion::unused_type T_copy_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {value};
|
|
boost::fusion::unused_type T_copy_direct_brace BOOST_ATTRIBUTE_UNUSED {value};
|
|
#endif
|
|
|
|
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
|
boost::fusion::unused_type T_move_copy BOOST_ATTRIBUTE_UNUSED = std::move(value);
|
|
boost::fusion::unused_type T_move_direct BOOST_ATTRIBUTE_UNUSED (std::move(value));
|
|
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
|
boost::fusion::unused_type T_move_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {std::move(value)};
|
|
boost::fusion::unused_type T_move_direct_brace BOOST_ATTRIBUTE_UNUSED {std::move(value)};
|
|
#endif
|
|
#endif
|
|
}
|
|
|
|
void unused_assignment()
|
|
{
|
|
boost::fusion::unused_type val1, val2;
|
|
|
|
val1 = val2;
|
|
#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
|
val1 = {};
|
|
#endif
|
|
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
|
val1 = std::move(val2);
|
|
#endif
|
|
|
|
|
|
T value;
|
|
|
|
val1 = value;
|
|
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
|
val1 = std::move(value);
|
|
#endif
|
|
}
|
|
|
|
boost::type_traits::yes_type test_unused(boost::fusion::detail::unused_only const&);
|
|
boost::type_traits::no_type test_unused(...);
|
|
|
|
void only_unused()
|
|
{
|
|
BOOST_STATIC_ASSERT((sizeof(test_unused(boost::fusion::unused)) == sizeof(boost::type_traits::yes_type)));
|
|
BOOST_STATIC_ASSERT((sizeof(test_unused(0)) == sizeof(boost::type_traits::no_type)));
|
|
|
|
boost::fusion::unused_type my_unused;
|
|
(void)my_unused;
|
|
BOOST_STATIC_ASSERT((sizeof(test_unused(my_unused)) == sizeof(boost::type_traits::yes_type)));
|
|
}
|