使用构造函数部分推导参数
Partially deduce arguments with constructor
采取以下class (C++17)
#include <variant>
template <typename Error, typename T>
class Optional
{
public:
constexpr Optional(T&& value)
: m_variant(std::forward<T>(value))
{}
private:
std::variant<Error, T> m_variant = Error{};
};
template <typename E, typename T>
Optional<E, T> MakeOptional(T&& val) { return Optional<E, T>{val}; }
enum class Error
{
ERROR,
OTHER_ERROR,
};
下面编译就好了
Optional<Error, int> opt1{4};
auto opt3 = MakeOptional<Error>(7);
但这并不
Optional<Error> opt2{4}; // does not compile "too few template arguments for class template 'Optional'"
上面的代码可以通过编译吗?它应该能够像 MakeOptional() 那样使用构造函数的参数推导出第二个模板参数。
采取以下class (C++17)
#include <variant>
template <typename Error, typename T>
class Optional
{
public:
constexpr Optional(T&& value)
: m_variant(std::forward<T>(value))
{}
private:
std::variant<Error, T> m_variant = Error{};
};
template <typename E, typename T>
Optional<E, T> MakeOptional(T&& val) { return Optional<E, T>{val}; }
enum class Error
{
ERROR,
OTHER_ERROR,
};
下面编译就好了
Optional<Error, int> opt1{4};
auto opt3 = MakeOptional<Error>(7);
但这并不
Optional<Error> opt2{4}; // does not compile "too few template arguments for class template 'Optional'"
上面的代码可以通过编译吗?它应该能够像 MakeOptional() 那样使用构造函数的参数推导出第二个模板参数。