为什么在某些情况下cv限定词从函数返回类型中删除?

问题描述 投票:3回答:1

看这个简单的例子:

template <typename T>
const T const_create() {
    return T();
}

struct Foo { };

int main() {
    auto &x = const_create<Foo>(); // compiles
    // auto &x = const_create<int>(); // doesn't compile
}

为什么带有Foo的版本不能编译,但是带有int的版本不能编译?换句话说,为什么constconst_create<int>的返回类型中删除?就像返回int而不是const int一样。这不是语言上的不一致吗?

标准在哪里要求这种行为?

c++ const value-categories
1个回答
4
投票

[expr]/6说:

© www.soinside.com 2019 - 2024. All rights reserved.