namespace std {
template <class T>
struct in_place_type_t {
explicit in_place_type_t() = default;
};
template <class T>
inline constexpr in_place_type_t<T> in_place_type{};
}
概要
in_place_type_t
クラスは、オーバーロードのための空クラスである。
標準ライブラリの特定機能において、要素型とそのコンストラクタ引数を直接受け取って構築するための関数オーバーロードを定義するためにある。
備考
デフォルトコンストラクタにexplicit
が付いているのは、in_place_type_t<T> x = {};
のように=
付きの波カッコ初期化を禁止するためである。ユーザーは通常、in_place_type_t<T>
型の定数として事前定義されているin_place_type<T>
を使用すればよいので、問題にはならない。
例
#include <iostream>
#include <any>
#include <string>
int main()
{
std::any x {
std::in_place_type<std::string>,
3,
'z'
};
std::cout << std::any_cast<std::string>(x) << std::endl;
}
出力
zzz
バージョン
言語
- C++17
処理系
- Clang: 4.0.1 ✅
- GCC: 7.3 ✅
- Visual C++: ??