我希望更好地理解自动模板推导(在使用g++ -std=c++17
编译时应用)在main()
中的前三行有效,但第四行失败的原因。是否有可能在不久的将来被编译器接受?
template <typename P = void>
class A {
public:
void f1() {}
};
template<typename C>
void g() {}
int main() {
A<> a; // works
A aa; // works
g<A<>>(); // works
g<A>(); // fails
return 0;
}
A
不是一种类型,而是一个用于类型的模板。 - Algirdas PreidžiusA
指的是模板,而不是实例化。 - 463035818_is_not_a_numberA a
可以工作,但g<A>
不能。这当然符合标准,但你很难说服任何人它是直观的(当然,C++并没有在这方面努力)。 - Max Langhof