2014-06-14 12 views
5

네임 스페이스 정의에 대한 섹션을 읽었습니다. N3797의 제 7.3.1 말했다 : 인라인 네임 스페이스 및 확장 네임 스페이스

인라인 키워드

가 이전에 해당 네임 스페이스의 원래 이름 공간 - 정의 에 사용 된 경우에만 연장 - 네임 스페이스 정의 에 사용할 수있다. 그것은 -std=c++11에 해당 옵션을 사용하지 않고 모두 성공적으로 컴파일

namespace M 
{ 
    int h; 
} 

inline namespace M 
{ 
    int j = 6; 
} 

:

는 다음과 같은 코드를 생각해 보자. 그 행동을 설명해 주시겠습니까? 버그 g++이 맞습니까?

답변

4

표준에 대한 참조는 명백합니다. 허용되지 않습니다.

연타를 사용 ++ 나는 이것에 대해 매우 분명한 오류 메시지가 :

Test0614-1.cpp:17:18: error: non-inline namespace cannot be reopened as inline 
inline namespace M 
       ^
Test0614-1.cpp:12:11: note: previous definition is here 
namespace M 
     ^

그래서 그것은 확실히 g의 버그 ++. 그런데 여기에보고되었습니다 : https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53402

컴파일러가 이전 버전의 표준에 대해 인라인 네임 스페이스를 허용한다는 사실은 최소한의 경고로 보입니다. 이것은 2010 년에 이미 버그로보고되었으며 수정되었을 것입니다 : https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43824