다음과 같은 프로그램을 고려 컴파일에 실패 : GCC 4.7.2, GCC 4.8.0, 그리고 연타 3.2로 컴파일 할 때간단한 프로그램
struct X
{
X(int, int) { }
X(X&&) { }
};
int main()
{
X x({0, 1}); // Doesn't compile on ICC 13.0.1, compiles on
// Clang 3.2, GCC 4.7.2, and GCC 4.8.0 beta.
}
을,이 프로그램은 (다음을 수행 *)
- 구축해에게 형의 임시
X
를 통과 후, 생성자0
및1
값; X
을 임시로 이동 구성합니다.
대신 ICC 13.0.1에서는 컴파일되지 않습니다.
질문 1 : 누가 옳았습니까?
(*) 는 사실, 이동 생성자에 임시의 생성과 호출이 생략하지만, -fno-elide-constructors
옵션을 사용하여 컴파일하고 생성자에 약간의 출력물을 추가 이것이 무슨 일인지는 것을 알 수있다.
지금 균일 초기화가 사용되는 위의 프로그램, 다음, 약간의 변화를 고려 x
직접를 초기화 :
int main()
{
X x{ {0, 1} }; // ERROR! Doesn't compile.
// ^........^
}
나는 중괄호의 사용을 기대하는 대신하지 않을 괄호를 사용하여 여기에 무엇이든 바꿀 수는 있지만 어쨌든이 프로그램은 에서 컴파일하지 않았다. (Clang 3.2, GCC 4.7.2, GCC 4.8.0 베타 및 ICC 13.0.1에서 테스트 한 컴파일러 중).
질문 2 : 왜?
두 번째 오류는 어떤 오류인지 궁금합니다. –
@ NicolBolas : [여기] (http://liveworkspace.org/code/10CpDi$73)에서 확인해보십시오. 컴파일러를 선택할 수 있습니다. –
당신은 이곳이 얼마나 효과가 있는지 알기에 충분히 오랫동안 여기에 왔습니다. 그것이 적절하다면, 질문에 넣으십시오. 일부 실제 작업 영역 페이지로 링크하지 마십시오. –