从可变参数值初始化中推导出类模板参数(clang vs g ++)

时间:2017-11-11 08:48:00

标签: c++ language-lawyer variadic-templates c++17 template-deduction

考虑以下可变参数类模板

template <typename... Ts>
struct foo
{
    template <typename... Us>
    foo(Us...) { }
};

如果我尝试以下列方式实例化foo g ++ (主干)和 clang ++ (主干)都很高兴:

auto o = foo{};

on godbolt.org

<小时/> 一旦我用括号切换到 value-initialization g ++ 就无法编译(而 clang ++ 仍然很高兴):

auto o = foo();
error: cannot deduce template arguments for 'foo' from ()
     auto o = foo();
                  ^

on godbolt.org

<小时/> 这是 g ++ 错误,还是在{}()初始化之间处理类模板参数推导的方式有所不同?

这也适用于正确的扣除指南https://godbolt.org/g/qReXpM

0 个答案:

没有答案