【发布时间】:2014-02-24 01:34:38
【问题描述】:
标准规定通过右值引用捕获应该是非法的:Catch By Rvalue Reference,但我有以下代码:
#include <string>
#include <iostream>
using namespace std;
int main(){
try {
throw string("test");
} catch (string && s) {
cout << s << endl;
}
return 0;
}
使用-Wall 选项成功编译,没有任何警告。这是怎么发生的?
我正在使用gcc version 4.6.3 20120306 (Red Hat 4.6.3-2) (GCC)
【问题讨论】:
-
也许它只是没有被 4.6.3 改变。请注意,GCC 直到最近才完成 C++11。 4.8 给出了适当的错误。
-
那是一个相当古老的编译器。更新的版本拒绝了这个:ideone.com/0lzc0e
-
看起来 4.7 接受它,但 4.8.2 不接受,当使用旧版本时,使用online compiler 会很有帮助。
-
@chris
4.8.1是第一个提供完整 C++11 支持的 gcc 版本,而不是4.8 -
@user2485710,我说得更笼统,因为 Coliru 使用的是 4.8 的任何版本(我认为是 4.8.1,但我不确定)。据我所知,4.8.0 比 4.8 更适合特定版本,除非 4.8 完全不同。
标签: c++ exception gcc c++11 g++