
項目 10:enum にはスコープを設ける
|
63
template <class T>
using remove_reference_t = typename remove_reference<T>::type;
template <class T>
using add_lvalue_reference_t =
typename add_lvalue_reference<T>::type;
ほら、もうこれ以上ないくらい簡単でしょう?
重要ポイント
•
typedef はテンプレート化に対応していないが、エイリアス宣言は対応している。
•
エイリアステンプレートでは接尾語「::type」、およびテンプレート内で typedef を表すの
に頻繁に必要になる接頭語「typename」を排除できる。
•
C++14 は、C++11 での型特性転換のすべてをエイリアステンプレートとして提供している。
項目 10:enum にはスコープを設ける
一般則として波括弧内で宣言した名前の有効範囲は、波括弧が定義するスコープ内に制限されま
す。しかし、C++98 スタイルの enum で宣言した列挙子には当てはまりません。この場合の列挙子の
スコープは、enum と同一になります。すなわち、enum を定義したスコープが列挙子名までも含む
ことを意味するに他なりません。
enum Color { black, white, red }; // black, white, red are
// in same scope as Color ...