给定一个类中的数据成员_value,由此定义:
unique_ptr<std::string> _value = nullptr;
以下内容无法编译。
auto getValue() const -> const decltype(*_value) &
编译器返回此错误:
'const'限定符不能应用于'std :: basic_string&amp;'
但是,如果我声明这样的函数:
auto getValue() const -> const remove_reference<decltype(*_value)>::type &;
它按照我的意愿编译和运行(即,基本上返回一个const字符串&amp;)
我发现这很奇怪。它可能是gcc编译器中的错误,还是两个声明之间存在一些根本区别?
decltype(* _ value)正确计算为basic_string&amp;这是找到所以我认为我可以只在它前面粘一个const它应该找到但似乎混淆了编译器......
请注意,我的意图基本上是函数将const引用返回到unique_ptr所指向的类型。
答案 0 :(得分:2)
我们可以使用wandbox在线测试gcc 5.0
,但这可以在T. {注释const在应用于引用时被忽略,来自草案C ++ 11标准8.3.2
:
除非引入了cv限定符,否则Cv限定引用的格式不正确 通过使用typedef-name(7.1.3,14.1)或decltype-specifier(7.1.6.2),在这种情况下cv-qualifiers 被忽略了。