2012-12-23 3 views
4
struct X 
{ 
    int a; 
    int b; 
}; 

int f(X x) 
{ 
    return x.a + x.b; 
} 

int main() 
{ 
    int n = f({1, 2}); 
} 

비주얼 스튜디오 2012 (11 월 CTP) 보고서 :초기화 프로그램 목록을 인수로 사용할 수없는 이유는 무엇입니까?

error C2664: 'int f(const X &)' : cannot convert parameter 1 from 
'initializer-list' to 'X' 

Reason: cannot convert from 'initializer-list' to 'X' 
Only an initializer-list with zero or one elements can be converted to this type 

Build FAILED. 
+2

Clang 3.1 및 g ++ 4.7.2는이 코드를 오류없이 컴파일합니다. – soon

+0

그렇다면 VC++의 버그 인 것 같습니다.하지만이 기능을 지원한다고 선언했습니다. – xmllmx

+0

VC++는 다양한 부분에서 깨져있는 것으로 알려져 있습니다. –

답변

1

비주얼 스튜디오 2012 (11 월 CTP) 보고서 :

그것은 심지어 베타 컴파일러 아니다. 일하기로되어있어. 내가 ideaone에 대한 작업을 귀하의 코드에 연결 하겠지만,이 웹 사이트는 그렇게 할 수 없습니다.

버그 신고를 신고하십시오.

+2

BTW, 여기는 [Ideaone 링크] (http://ideone.com/05feuD) 사이트에서 사용하지 않을 것입니다. –

1

당신이 당신의 생성자에 목록 스타일 구문을 intializer 전달하려는 경우 다음 당신은 당신의 생성자에 std::initializer_list 유형을 통과해야합니다. 이 유형은 { } 구문 스타일 구성을 전달할 때 유형 배열을 생성합니다.

+0

나는이 스타일이 꽤 표현 적이라고 생각한다. 표준이 왜 그것을 지원하지 않았습니까? – xmllmx

+2

생성자를 추가해야한다면 X는 더 이상 POD 유형이 아니며 원하는 것입니다. – xmllmx