【发布时间】:2015-03-17 20:56:00
【问题描述】:
给定一个类中的数据成员_value,定义如下:
unique_ptr<std::string> _value = nullptr;
以下内容无法编译。
auto getValue() const -> const decltype(*_value) &
编译器返回此错误:
‘const’限定符不能应用于‘std::basic_string&’
但是,如果我这样声明函数:
auto getValue() const -> const remove_reference<decltype(*_value)>::type &;
它按照我的意愿编译和运行(即,本质上返回一个 const 字符串&)
我觉得这很奇怪。这可能是 gcc 编译器中的错误,还是这两个声明之间存在一些根本区别?
decltype(*_value) 正确计算为 basic_string& 这是 find 所以我想我可以在它前面贴一个 const 并且它应该是 find 但似乎混淆了编译器......
请注意,我的意图基本上是让函数返回对 unique_ptr 指向的类型的 const 引用。
【问题讨论】:
-
GCC 在拒绝您的第一个版本时出现问题(该错误已在 GCC 主干上修复),但该版本也没有执行您想要的操作(
const应用于参考type,被忽略,引用折叠后函数返回std::string&)。