【发布时间】:2021-12-25 13:39:34
【问题描述】:
在下面的代码中,有一个 A<T> 对象的初始化,模板参数推导使用指定的初始化器以两种稍微不同的形式:
template<typename T>
struct A { T t; };
int main() {
A a{.t=1}; //#1: ok in GCC and MSVC
A b{.t={1}}; //#2: ok in MSVC only
}
GCC 和 MSVC 都接受第一种方式,而第二种方式仅在 GCC 打印错误时适用于 MSVC:
error: class template argument deduction failed:
error: no matching function for call to 'A(<brace-enclosed initializer list>)'
演示:https://gcc.godbolt.org/z/PaEaMjM7q
哪个编译器在那里?
【问题讨论】:
标签: c++ templates language-lawyer c++20 aggregate-initialization