2017-12-30 34 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 {...}'の中に置くだけで、名前空間stdに定義を追加するだけです。 –

関連する問題