📄 variant_reference_test.cpp
字号:
//-----------------------------------------------------------------------------// boost-libs variant/test/variant_reference_test.cpp source file// See http://www.boost.org for updates, documentation, and revision history.//-----------------------------------------------------------------------------//// Copyright (c) 2003// Eric Friedman, Itay Maman//// 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/variant.hpp"#include "boost/test/minimal.hpp"#include "boost/mpl/bool.hpp"#include "boost/type_traits/add_reference.hpp"#include "boost/type_traits/is_pointer.hpp"/////// support types and functionsstruct base_t { };struct derived_t : base_t { };template <typename Base, typename Derived>bool check_base_derived(Base* b, Derived* d, long){ return b == d;}template <typename Base, typename Derived>bool check_base_derived(Base& b, Derived& d, int){ return &b == &d;}template <typename T> typename boost::add_reference<T>::typewknd_get(boost::variant<T&>& var, long){ return boost::get<T>(var);}template <typename T> typename boost::add_reference<T>::typewknd_get(boost::variant<T>& var, int){ return boost::get<T>(var);}/////// test functionstemplate <typename T>void test_reference_content(T& t, const T& value1, const T& value2){ BOOST_CHECK( !(value1 == value2) ); ///// boost::variant< T& > var(t); BOOST_CHECK(( boost::get<T>(&var) == &t )); t = value1; BOOST_CHECK(( boost::get<T>(var) == value1 )); ///// boost::variant< T > var2(var); BOOST_CHECK(( boost::get<T>(var2) == value1 )); t = value2; BOOST_CHECK(( boost::get<T>(var2) == value1 ));}template <typename Base, typename Derived>void base_derived_test(Derived d){ typedef typename boost::is_pointer<Base>::type is_ptr; Base b(d); BOOST_CHECK((check_base_derived( b , d , 1L ))); boost::variant<Base> base_var(d); BOOST_CHECK((check_base_derived( wknd_get(base_var, 1L) , d , 1L ))); boost::variant<Derived> derived_var(d); boost::variant<Base> base_from_derived_var(derived_var); BOOST_CHECK((check_base_derived( wknd_get(base_from_derived_var, 1L) , wknd_get(derived_var, 1L) , 1L )));}int test_main(int , char* []){ int i = 0; test_reference_content(i, 1, 2); ///// derived_t d; base_derived_test< int&,int >(i); base_derived_test< base_t*,derived_t* >(&d); base_derived_test< base_t&,derived_t& >(d); return boost::exit_success;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -