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

decltype and const reference return types for strings

本文关键字:引用 返回类型 const decltype 字符串      更新时间:2023-10-16

给定类中的数据成员_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 &;

它按照我想要的方式编译和行为(即,本质上返回一个常量字符串&)

我觉得这很奇怪。这可能是gcc编译器中的一个错误,还是这两个声明之间有一些根本的区别?

decltype(*_value)正确地计算为basic_string&它是find,所以我想我可以在它前面加一个const,它应该是find的,但似乎混淆了编译器。。。

请注意,我的意图基本上是让函数返回对unique_ptr所指向的类型的const引用。

这似乎在gcc 5.0中得到了修复,我们可以使用wandbox在线测试,但正如T.C.所指出的,当应用于参考时,会忽略来自C++11标准草案8.3.2:的常量

Cv限定的引用格式不正确,除非引入了Cv限定符通过使用typedef名称(7.1.3,14.1)或decltype说明符(7.1.6.2),在这种情况下,cv限定符被忽略。