backports-optional.hpp File Reference

C++17 std::optional backport implemented using boost::optional. More...

#include "backports.hpp"
#include <boost/none.hpp>
#include <boost/optional.hpp>
#include <boost/utility/typed_in_place_factory.hpp>
+ Include dependency graph for backports-optional.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  ndn::bad_optional_access
 
struct  ndn::in_place_t
 
class  ndn::nullopt_t
 
class  ndn::optional< T >
 
class  ndn::optional< T >
 

Namespaces

 ndn
 Copyright (c) 2013-2017 Regents of the University of California.
 

Functions

template<typename T >
constexpr optional< typename std::decay< T >::type > ndn::make_optional (T &&value)
 
template<typename T , typename... Args>
constexpr optional< T > ndn::make_optional (Args &&...args)
 
template<typename T >
constexpr bool ndn::operator!= (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
constexpr bool ndn::operator< (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
constexpr bool ndn::operator<= (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
constexpr bool ndn::operator== (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
constexpr bool ndn::operator> (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
constexpr bool ndn::operator>= (const optional< T > &lhs, const optional< T > &rhs)
 

Variables

constexpr in_place_t ndn::in_place {}
 
constexpr nullopt_t ndn::nullopt {0}
 

Detailed Description

C++17 std::optional backport implemented using boost::optional.

See also
http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/n4594.pdf section 20.6
http://en.cppreference.com/w/cpp/utility/optional

Differences from C++17 include:

  • No constructor and operator= taking a T&&, because boost::optional lacks a move constructor as of Boost 1.54
  • No constructor, operator=, emplace, and make_optional with std::initializer_list
  • In-place constructor and emplace require copyable arguments, because boost::in_place requires such
  • Move constructor may or may not exist (it's implicitly defined when available), because boost::optional lacks a move constructor as of Boost 1.54
  • Non-const operator-> and operator* are not constexpr
  • value() is not constexpr
  • swap is declared without noexcept specification
  • No comparison operators with const T& or nullopt_t
  • No specialized std::hash support

Definition in file backports-optional.hpp.