Fed*_*dor 5 c++ templates language-lawyer aggregate-initialization c++20
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
}
Run Code Online (Sandbox Code Playgroud)
第一种方式被 GCC 和 MSVC 接受,而第二种方式仅适用于 MSVC,但 GCC 会打印错误:
error: class template argument deduction failed:
error: no matching function for call to 'A(<brace-enclosed initializer list>)'
Run Code Online (Sandbox Code Playgroud)
演示: https: //gcc.godbolt.org/z/PaEaMjM7q
哪个编译器是正确的?
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |