考虑这个例子:
template <typename T>
using type = typename T::type;
template <typename T>
struct A
{
A(type<T>);
};
A<int> f();
A<int> g() { return f(); }
Run Code Online (Sandbox Code Playgroud)
由于int没有嵌套的typetypedef,gcc和clang都没有编译这段代码.但是为什么构造函数会被实例化呢?f()是一个与返回相同类型的prvalue,g()甚至不应该在那里移动.是什么导致我们实例化坏构造函数?