13#include <boost/serialization/strong_typedef.hpp>
15#include <boost/config.hpp>
16#include <boost/operators.hpp>
17#include <boost/type_traits/has_nothrow_assign.hpp>
18#include <boost/type_traits/has_nothrow_constructor.hpp>
19#include <boost/type_traits/has_nothrow_copy.hpp>
24#define STRONG_TYPEDEF(T, D) \
26 : boost::totally_ordered1< D \
27 , boost::totally_ordered2< D, T \
30 typedef T* value_type; \
32 explicit D(T* t_) BOOST_NOEXCEPT_IF(boost::has_nothrow_copy_constructor<T>::value) : t((t_)) {} \
33 D() BOOST_NOEXCEPT_IF(boost::has_nothrow_default_constructor<T>::value) : t(nullptr) {} \
34 D( D* t_) BOOST_NOEXCEPT_IF(boost::has_nothrow_copy_constructor<T>::value) : t(t_->t) {} \
35 D* operator=( D* rhs) BOOST_NOEXCEPT_IF(boost::has_nothrow_assign<T>::value) { t = (rhs)->t; return this; } \
36 D* operator=( T* rhs) BOOST_NOEXCEPT_IF(boost::has_nothrow_assign<T>::value) { t = (rhs); return this; } \
37 operator const T* () const { return t; } \
38 operator T* () { return t; } \
39 operator const T& () const { return *t; } \
40 operator T& () { return *t; } \
41 bool operator==(const D* rhs) { return t == rhs->t; } \
42 bool operator<(const D* rhs) { return t < rhs->t; } \
43 void null() { t = nullptr; } \
54 const Class& lhs_mod(lhs);
55 const Class& rhs_mod(rhs);
56 return lhs_mod < rhs_mod;
Definition: matml31.hxx:897
Definition: matml31.hxx:2658
Contains the GUI and GUI associated classes. OnInit() calls the creation of the MaterialFrame GUI
Definition: BT_MatML_App.h:39
STRONG_TYPEDEF(GlossaryTerm::Definition_type, Definition)
Allows for the boost::any_cast to work with uniquely identify typedefs in the MatML Schema.
bool operator<(const Class::ParentSubClass_type &lhs, const Class::ParentSubClass_type &rhs)
This was required for the creation of the ParentSubClass strongtype
Definition: matml31_strongtypedef.h:53