1 /* 2 Copyright 2019 Glen Joseph Fernandes 3 (glenjofe@gmail.com) 4 5 Distributed under the Boost Software License, Version 1.0. 6 (http://www.boost.org/LICENSE_1_0.txt) 7 */ 8 #ifndef BOOST_CORE_NVP_HPP 9 #define BOOST_CORE_NVP_HPP 10 11 #include <boost/core/addressof.hpp> 12 #include <boost/config.hpp> 13 14 namespace boost { 15 namespace serialization { 16 17 template<class T> 18 class nvp { 19 public: nvp(const char * n,T & v)20 nvp(const char* n, T& v) BOOST_NOEXCEPT 21 : n_(n) 22 , v_(boost::addressof(v)) { } 23 name() const24 const char* name() const BOOST_NOEXCEPT { 25 return n_; 26 } 27 value() const28 T& value() const BOOST_NOEXCEPT { 29 return *v_; 30 } 31 const_value() const32 const T& const_value() const BOOST_NOEXCEPT { 33 return *v_; 34 } 35 36 private: 37 const char* n_; 38 T* v_; 39 }; 40 41 template<class T> 42 inline const nvp<T> make_nvp(const char * n,T & v)43make_nvp(const char* n, T& v) BOOST_NOEXCEPT 44 { 45 return nvp<T>(n, v); 46 } 47 48 } /* serialization */ 49 50 using serialization::nvp; 51 using serialization::make_nvp; 52 53 } /* boost */ 54 55 #define BOOST_NVP(v) boost::make_nvp(BOOST_STRINGIZE(v), v) 56 57 #endif 58