请考虑以下代码段:
struct foo_t;
template<typename T>
void foo() {
T{}.foo(foo_t{});
}
struct foo_t {};
struct S {
void foo(foo_t) {}
};
int main() {
foo<S>();
}
GCC愉快compiles it,同时铿锵rejects the snippet并出现以下错误:
错误:无效使用不完整类型&#39; foo_t&#39;
哪种编译器是正确的,为什么?