自动类型推导函数返回值

时间:2017-05-29 10:00:29

标签: c++ c++14 auto type-deduction

我正在观看Scott Meyers的在线视频,并在演讲中得到了不同的结果。这是代码:

auto LookupValue(int i) {
    static vector<int> values = {1, 2, 3, 4, 5};
    return values[i];
}

我得到了一条关于返回线的警告信息:'返回'int&amp;'从函数返回'void''。 为什么返回值推断为无效?

这是我的测试床:

fetag@MacgicBox ~$ clang --version
Apple LLVM version 8.1.0 (clang-802.0.42)
Target: x86_64-apple-darwin16.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

快速更新: 我按如下方式测试返回值,并且编译DO设置带有积分的返回类型,并且应该按值返回,因为只有最后一行输出为1,其他都是0。

cout << is_lvalue_reference<decltype(LookupValue(2))>::value << endl;
cout << is_rvalue_reference<decltype(LookupValue(2))>::value << endl;
cout << is_reference<decltype(LookupValue(2))>::value << endl;
cout << is_pointer<decltype(LookupValue(2))>::value << endl;
cout << is_void<decltype(LookupValue(2))>::value << endl;
cout << is_integral<decltype(LookupValue(2))>::value << endl;

更新结论: 最后,这是CLion的解析组件的一个错误,他们承诺在下一个版本中修复它。这是错误报告和反馈:

https://youtrack.jetbrains.com/issue/CPP-9906

1 个答案:

答案 0 :(得分:3)

  

为什么返回值推断为无效?

编译器犯了一个错误。它应该推导出int,而不是void。

......或者示例还没有完成。