C++11 从decltype中删除类成员类型部分

C++11 从decltype中删除类成员类型部分,c++11,g++,decltype,C++11,G++,Decltype,在对模板类的成员使用decltype时,我遇到了我以前从未见过的案例。我想做一个更好的make_unique,这样更改成员的类型不会导致修复make_unique调用。我想使用decltype(member)::element\u type作为make\u unique的类型来避免这种情况,但出现了一个错误。下面是一个显示错误的简单代码段(我理解为什么会显示它): 但这似乎给出了一个解析错误。您只需在decltype()之前放置一个typename 我是说 p_ = std::make_

在对模板类的成员使用
decltype
时,我遇到了我以前从未见过的案例。我想做一个更好的
make_unique
,这样更改成员的类型不会导致修复
make_unique
调用。我想使用
decltype(member)::element\u type
作为
make\u unique
的类型来避免这种情况,但出现了一个错误。下面是一个显示错误的简单代码段(我理解为什么会显示它):


但这似乎给出了一个解析错误。

您只需在
decltype()之前放置一个
typename

我是说

    p_ = std::make_unique<typename decltype(p_)::element_type>();
p_u=std::使_唯一();

我不明白你到底想要什么:把
typename
放在
decltype(p)
之前有什么不对?或者通过使用
声明之前的类型?@max66
typename
完全可以-我想去掉
(foo*)this)->foo::p
部分。@max66我虽然可以通过
*p
std::remove_引用
来解决这个问题,但这在coliru中给出了一个解析错误:(@max66,谢谢你的输入,问题还不清楚-我在问题中添加了我想去掉的部分。但是
std::make_unique();
也用g编译++
p_ = std::make_unique<decltype(std::remove_reference(*p_)::type)>();
    p_ = std::make_unique<typename decltype(p_)::element_type>();