我不明白为什么下面的代码是错误的。
struct A{
typedef std::vector<std::vector<int>> Base;
// const auto& func(std::size_t e) const
auto func(std::size_t e) const -> decltype(std::declval<Base>()[e])
{
return base[e];
}
Base base;
};
我在 gcc 4.8.1 中收到上述代码段的编译错误。(错误:从'const value_type {aka const std::vector}'类型的表达式中对'__gnu_cxx::__alloc_traits >>::value_type& {aka std::vector&}'类型的引用无效初始化返回base[e];)
请注意,如果我删除const
限定符,它工作正常。
但是,如果我用注释的部分替换函数签名部分(使用 C++14 中引入的自动类型推导)。不会产生错误。所以,我猜 decltype 部分是错误的。