namespace std {
template <class T>
struct is_implicit_lifetime;
template <class T>
inline constexpr bool is_implicit_lifetime_v = is_implicit_lifetime<T>::value;
}
概要
型T
が暗黙的に構築されるかを調べる。
暗黙的な構築はC++20で取り入れられた仕様であり、次のいずれかに該当する型であれば暗黙的に構築される
- スカラ型
- 配列型
- 要素型は問わない
- implicit-lifetime class types
- デストラクタがユーザー定義されていない集成体型、もしくは
- 少なくとも1つの資格のあるトリビアルコンストラクタと、トリビアルで削除されていないデストラクタを持つ型
- 1~3のCV修飾された型
要件
型T
は配列型、完全型、またはvoid
でなければならない。
効果
is_implicit_lifetime
は、型T
が暗黙的に構築されるのであればtrue_type
から派生し、そうでなければfalse_type
から派生する。
例
#include <type_traits>
#include <utility>
enum Enum {};
class Class {};
class NotTrivial {
public:
~NotTrivial() {}
};
int main() {
int i_array[1];
NotTrivial nt_array[1];
static_assert(std::is_implicit_lifetime<int>());
static_assert(std::is_implicit_lifetime<int*>());
static_assert(std::is_implicit_lifetime<decltype(i_array)>());
static_assert(std::is_implicit_lifetime<Enum>());
static_assert(std::is_implicit_lifetime<Class>());
static_assert(!std::is_implicit_lifetime<NotTrivial>());
static_assert(std::is_implicit_lifetime<decltype(nt_array)>());
static_assert(std::is_implicit_lifetime<std::pair<int, int>>());
static_assert(!std::is_implicit_lifetime<std::pair<int, NotTrivial>>());
}
出力
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: ??
- Visual C++: ??