字符串的decltype和const引用返回类型

时间:2015-03-17 20:56:00

标签: c++ c++11 auto decltype

给定一个类中的数据成员_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所指向的类型。

1 个答案:

答案 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   被忽略了。