2017-12-30 31 views
3

다음 코드는 표준별로 잘 구성된 프로그램입니까?사용자 정의 유형에 의존하지 않는 전역 이름 공간에서 표준 정의 유형에 대한 연산자를 오버로드하는 것은 올바른 형식입니까?

std::ostream& operator<<(std::ostream& out, std::chrono::system_clock::time_point tp) 
{ 
    return out << tp.time_since_epoch().count(); 
} 

이 표준 라이브러리에 정의 된 템플릿 아니며, std 네임 스페이스 내에서 정의되지 않은, 그래서 잘 형성된 것 같다,하지만 난 나에게 뭔가를 놓치고 있습니다.

답변

3

너 같은 기능을 정의하는 것을 금지하는 Constraints on programs 섹션에 아무것도 표시되지 않습니다.

내가 말하는데, 그렇게하는 것이 타당합니다.

+0

나는 동의하지 않습니다. 표시된 예제는 네임 스페이스'std' (또는'std' 내의 네임 스페이스)에 정의를 추가합니다. 따라서이 동작은 정의되지 않습니다. 이 유형의 예제는 "기타 달리 명시된"사례가 아니기 때문에 링크 된 텍스트의 첫 번째 문장 (특히 17.6.4.2.1 항 1 절)과 충돌합니다. – Peter

+3

@Peter'namespace std {...} '안에 넣을 경우에만 namespace std에 정의를 추가합니다. –