mirror of
				https://github.com/boostorg/optional.git
				synced 2025-11-04 01:31:57 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright 2017 Peter Dimov
 | 
						|
// Copyright 2017 Vinnie Falco
 | 
						|
// Copyright 2018 Andrzej Krzemienski
 | 
						|
//
 | 
						|
// Distributed under the Boost Software License, Version 1.0.
 | 
						|
//
 | 
						|
// http://www.boost.org/LICENSE_1_0.txt
 | 
						|
 | 
						|
#include <boost/config.hpp>
 | 
						|
 | 
						|
#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
 | 
						|
 | 
						|
int main()
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
#else
 | 
						|
 | 
						|
#include <boost/optional.hpp>
 | 
						|
#include <utility>
 | 
						|
 | 
						|
class basic_multi_buffer;
 | 
						|
 | 
						|
class const_buffers_type // a similar declaration in boost.beast had problem
 | 
						|
{                        // with boost optional
 | 
						|
    basic_multi_buffer const* b_;
 | 
						|
 | 
						|
    friend class basic_multi_buffer;
 | 
						|
 | 
						|
    explicit
 | 
						|
    const_buffers_type(basic_multi_buffer const& b);
 | 
						|
 | 
						|
public:
 | 
						|
    const_buffers_type() = delete;
 | 
						|
    const_buffers_type(const_buffers_type const&) = default;
 | 
						|
    const_buffers_type& operator=(const_buffers_type const&) = default;
 | 
						|
};
 | 
						|
 | 
						|
void test_beast_example()
 | 
						|
{
 | 
						|
  // test if it even compiles
 | 
						|
  boost::optional< std::pair<const_buffers_type, int> > opt, opt2;
 | 
						|
  opt = opt2;
 | 
						|
  (void)opt;
 | 
						|
}
 | 
						|
 | 
						|
struct NotDefaultConstructible // minimal class exposing the problem
 | 
						|
{
 | 
						|
  NotDefaultConstructible() = delete;
 | 
						|
};
 | 
						|
 | 
						|
void test_assign_for_non_default_constructible()
 | 
						|
{
 | 
						|
  // test if it even compiles
 | 
						|
  boost::optional<NotDefaultConstructible> opt, opt2;
 | 
						|
  opt = opt2;
 | 
						|
  (void)opt;
 | 
						|
}
 | 
						|
 | 
						|
int main()
 | 
						|
{
 | 
						|
  test_beast_example();
 | 
						|
  test_assign_for_non_default_constructible();
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |