AM Daemon ライブラリリファレンス
traits.h
[詳解]
1 /// @file
2 /// @brief 型に関するメタ関数を定義するヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_UTIL_TRAITS_H
7 #define AMDAEMON_UTIL_TRAITS_H
8 
9 #include "amdaemon/env.h"
10 
11 #include <type_traits>
12 #include <cstddef>
13 
14 namespace amdaemon
15 {
16 namespace util
17 {
18 /// @addtogroup g_util
19 /// @{
20 
21  /// @brief 型 T がバイナリベースでコピー可能な型であるか否かを調べるメタ関数。
22  /// @tparam T 調べる型。
23  ///
24  /// 型 T から const, volatile を取り除いた型が下記の要件をすべて満たすならば
25  /// 静的メンバ定数 value は true となる。
26  ///
27  /// - オブジェクト型(スカラ型、配列、クラス&構造体、共用体のいずれか)である。
28  /// - トリビアルコピー可能な型である。
29  /// - ポインタ型ではない。
30  /// - std::nullptr_t 型ではない。
31  ///
32  /// このメタ関数では、データメンバにポインタ型を持つ型については除外できない。
33  template<class T>
35  :
36  public std::integral_constant<
37  bool,
38  std::is_object<typename std::remove_cv<T>::type>::value &&
39  std::is_trivially_copyable<typename std::remove_cv<T>::type>::value &&
40  !std::is_pointer<typename std::remove_cv<T>::type>::value &&
41  !std::is_same<typename std::remove_cv<T>::type, std::nullptr_t>::value>
42  {
43  };
44 
45  /// @brief 型 T[N] がバイナリベースでコピー可能な型であるか否かを調べるメタ関数。
46  /// @tparam T 調べる配列型の要素型。
47  /// @tparam N 調べる配列型の要素数。
48  /// @see IsBinaryCopyable
49  /// @note VC++2013で固定長配列型がうまく調べられないため、その対策に部分特殊化。
50  template<class T, std::size_t N>
51  struct IsBinaryCopyable<T[N]> : public IsBinaryCopyable<T>
52  {
53  };
54 
55 /// @}
56 } // namespace util
57 } // namespace amdaemon
58 
59 #endif // AMDAEMON_UTIL_TRAITS_H
Daemonライブラリの環境定義を行うヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
型 T がバイナリベースでコピー可能な型であるか否かを調べるメタ関数。
Definition: traits.h:34