To reduce count of constructors
There are many constructors inside Featured and Holder implementations. For example,
template < typename _Value, typename _Tool = ::Inplace::DefaultTool >
class Featured
{
...
template < typename ... _Arguments >
constexpr Featured ( _Arguments && ... arguments );
Featured ( ThisType && other );
Featured ( const ThisType && other );
Featured ( ThisType & other );
Featured ( const ThisType & other );
template < typename _OtherType, typename _OtherTool >
Featured ( Featured< _OtherType, _OtherTool > && other );
template < typename _OtherType, typename _OtherTool >
Featured ( const Featured< _OtherType, _OtherTool > && other );
template < typename _OtherType, typename _OtherTool >
Featured ( const Featured< _OtherType, _OtherTool > & other );
template < typename _OtherType, typename _OtherTool >
constexpr Featured ( Featured< _OtherType, _OtherTool > & other );
};
This constructors have the same implementation inside them.
Maybe it is possible to exchange them by one using some like this:
template < typename _Value, typename _Tool = ::Inplace::DefaultTool >
class Featured
{
template < typename _OtherType, typename = ::std::enable_if_t< ::std::is_reference_v< _Other_Type > && is_featured< _OtherType > > >
using Reference = _OtherType;
...
template < typename ... _Arguments >
constexpr Featured ( _Arguments && ... arguments );
template < typename _OtherType >
constexpr Featured ( Reference< _OtherType > other );
};