非类rvalues始终具有cv不合格类型

fre*_*low 33 c++ rvalue rvalue-reference c++11

§3.10第9节说"非类别rvalues总是有cv不合格类型".这让我很奇怪......

int foo()
{
    return 5;
}

const int bar()
{
    return 5;
}

void pass_int(int&& i)
{
    std::cout << "rvalue\n";
}

void pass_int(const int&& i)
{
    std::cout << "const rvalue\n";
}

int main()
{
    pass_int(foo()); // prints "rvalue"
    pass_int(bar()); // prints "const rvalue"
}
Run Code Online (Sandbox Code Playgroud)

根据标准,对于非类型类型没有const rvalue,但bar()更喜欢绑定const int&&.这是编译器错误吗?

编辑:显然,this也是一个const rvalue :)

编辑:这个问题似乎在g ++ 4.5.0中得到修复,现在两行打印"rvalue".

Jer*_*fin 11

委员会似乎已经意识到这部分标准存在问题.CWG问题690讨论了与标准完全相同部分的一些类似问题(在2009年9月的"附加说明"中).我想很快就会为标准的那一部分起草新语言.

编辑:我刚刚在comp.std.c ++上提交了一篇文章,注意到了问题,并为标准的相关部分提出了新的措辞.不幸的是,作为一个受审核的新闻组,几乎每个人都可能在通过那里的审批队列时忘记了这个问题.