diff --git a/include/CompileOptional.h b/include/CompileOptional.h index b1096cc..b61c9d7 100644 --- a/include/CompileOptional.h +++ b/include/CompileOptional.h @@ -6,24 +6,39 @@ #define CONST_CONTAINER_COMPILEOPTIONAL_H_ #include +#include namespace cc { - template + template class CompileOptional {}; template class CompileOptional { public: using defined = std::false_type; + using value_type = T; + + constexpr CompileOptional() = default; + constexpr CompileOptional(const value_type& value) {} + template + constexpr CompileOptional(Args... args) {} }; template class CompileOptional { public: using defined = std::true_type; - operator T&() { return _data; } + using value_type = T; + + constexpr CompileOptional() = default; + constexpr CompileOptional(const value_type& value) : _value(value) {} + constexpr CompileOptional(value_type&& value) : _value(value) {} + template + constexpr CompileOptional(Args... args) : _value( { std::forward(args)... } ) {} + + constexpr operator T&() { return _value; } private: - T _data; + T _value; }; }