のstd ::配列<>とstd :: IS_ARRAY <>は、両方のC++ 11で導入されたので、これはコンパイルに失敗したことを非常に奇妙なようだ:なぜstd :: is_arrayはstd :: arrayに対してfalseを返しますか?
#include <array>
#include <type_traits>
static_assert(std::is_array<std::array<int,2>>::value);
がいるかどうかを確認するための簡単な方法はあります何かが配列で、T[N]
とstd::array<T,N>
の両方の可能性を含んでいますか?それは残念ながらstd::array
のための専門を提供していません
template<class T>
struct is_array : std::false_type {};
template<class T>
struct is_array<T[]> : std::true_type {};
template<class T, std::size_t N>
struct is_array<T[N]> : std::true_type {};
:
'std :: array'は単純に配列ではありません。彼らは 'std :: array_wrapper'や' std :: better_array'のようなものよりも便利な名前だから、ちょうどそれを呼びました。 – user2357112
@ user2357112: 'is_array <>'の意味は 'array <>'を定義したのと同じ言語の同じバージョンによって決定されていたので、 "配列は配列ではない"という概念は不合理に思われます? –
スマートポインタは 'is_pointer'も渡しません。 'std :: is_array'は特殊な' std :: array'を使うとそれほど役に立たないでしょうし、 'std :: array'を実際の配列にすることは、まず' std :: array'を作成する全体の点を打ち負かします。名前があなたに混乱させないようにしてください。 – user2357112