【发布时间】:2018-10-03 22:13:25
【问题描述】:
是否可以编写一个推导指南,以便可以在没有模板参数的情况下声明Simple 的实例?我已经尝试过,但无法获得正确的形式来提取 std::unique_ptr 元素类型。
//------------------------------------------------------------------------------
template< class T >
class Simple
{
public:
Simple( std::unique_ptr< T >& u ) :
u_( u )
{}
private:
std::unique_ptr< T >& u_;
};
class MyThing
{};
int main()
{
std::unique_ptr< MyThing > upSimple;
Simple( upSimple ); // error C2955: 'Simple': use of class template requires template argument list
}
【问题讨论】:
-
最头疼的解析又来了!
-
一旦你修复了令人头疼的解析错误,它仍然无法编译 - MSVC 还不支持 CTAD 吗?
-
根据@rakete 的观察,编译(在 gcc 下):
Simple s ( upSimple );,参见:wandbox.org/permlink/V4bp2fsfk49cYMSd -
@Barry 最新的 MSVC。 godbolt.org/z/Z1pXRo
-
Simple{upSimple}?
标签: c++ templates c++17 template-argument-deduction