为什么GCC允许通过右值参考捕获?

时间:2014-02-24 01:34:39

标签: c++ exception gcc c++11 g++

标准规定,通过右值引用捕获应该是非法的: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)

1 个答案:

答案 0 :(得分:7)

gcc 4.8.1gcc的{​​{3}}版本。因此,在此之前的版本中看到不完整的 C ++ 11 支持并不奇怪。我们可以看到first C++11 feature complete出现以下错误:

error: cannot declare catch parameter to be of rvalue reference type 'std::string&& {aka std::basic_string<char>&&}'
 } catch (string && s) {
                    ^

4.8.2 rejects this详细说明哪个版本支持哪些主要功能。