是的,这是叮当虫,看
Class template argument deduction with deduced type fails when accessing member
上面写着:
尝试编译以下C++程序:
template <class T>
struct C {
C(T) {}
int a;
};
template <class T>
int foo(T v) {
return C{v}.a; // <----
}
int main() {
foo(4);
}
上面标记的行失败,错误为:
error: member reference base type 'C' is not a structure or union
return (C{v}).a;
~~~~~~^~
bug报告还指定了可以工作的案例,这些案例可能是或者不是替代方案。
请注意,以下各项工作正常:
template <class T>
C<T> foo(T v) {
return C{v};
}
和
int foo(int v) {
return C{v}.a;
}
和
C{4}.a;
我也在最近的一个主干构建(主干346600)上尝试过这个方法。