【发布时间】:2018-08-08 19:52:22
【问题描述】:
考虑以下代码:
struct A {};
template <typename T> struct B
{
B(T) {}
auto foo() {return B(A{});} // error: no matching function for call to 'B<int>::B(A)'
};
auto foo() {return B(A{});} // compiles
int main()
{
foo();
B b(0);
b.foo();
}
我明白为什么B::foo() 不能编译:struct B<T> 内部,B(作为注入的类名)意味着B<T>,除非它被明确用作模板。在这种情况下,它可以防止类模板参数推导。
假设我做不到auto foo() {return B<A>(A{});},因为我的实际代码依赖于稍微复杂的用户提供的推导指南。
问题是:在B::foo 内部构造B 时,如何强制类模板参数推导?
我希望我没有遗漏一些明显的东西。
【问题讨论】:
-
::B(A{})? ---