C++11 ではalignas
、新しい型を定義するために使用できるキーワードがあります。これは単に既存の型ですが、より厳密なアラインメント (typedef など) を使用します。
typedef char Maximally_Aligned_Char alignas( max_align_t );
typename T
を指定して、型の元の「自然な」アラインメントをプログラムで決定する方法はありますか? コンパイルされる次の概念的なnatural_alignment_of
type_trait のようなもの:
size_t natural_char_alignment = natural_alignment_of< Maximally_Aligned_Char >::value;
static_assert( natural_char_alignment == alignof( char ) );
背景:
すべてのスカラー型に作用するテンプレート化されたコードを書いています。一般に、整数の場合( sizeof( T ) == alignof( T ) )
は正しいですが、公式のalignas
サポートにより、この仮定をもう行うことはできないと思います.
憶測:
おそらく何かstd::decay
がうまくいくでしょうか?コードをテストすると、G++4.8 が「テンプレート引数の属性を無視する」ことについて警告していることがわかりました。