C++標準ライブラリで使われるタグ型(tag type)とタグ値の実装イディオム。
デフォルトコンストラクタへのexplicit指定は、{}
によるタグ型(mytag_t
)デフォルト構築を禁止するため。
struct mytag_t { explicit mytag_t() = default; }; inline constexpr mytag_t mytag{}; // C++17以降
struct S {}; void f(S); // #1 void f(mytag_t); // #2 f({}); // #1を呼び出す
関連URL