stdタイプのユーザー定義の演繹ガイド

Aug 15 2020

何らかの理由で、clangで期待されるCTADがまだ不足しています:std::initializer_list

std::initializer_list l{1,2,3}; // error in clang

次のようなユーザー定義ガイドを追加すると、問題を解決できます。

namespace std {
    template<class T> 
    initializer_list(const initializer_list<T>&) -> initializer_list<T>; 
} 

しかし、std::タイプのCTADのユーザー定義ガイドを追加することは許可されていますか?

回答

5 Oliv Aug 15 2020 at 17:17

標準ライブラリタイプに推論ガイドを追加するのはUB [namespacestd]§4.4です。

C ++プログラムの動作は、次のように宣言されている場合は未定義です:[...]

  • 標準ライブラリクラステンプレートの推論ガイド。