C++11 ではalignas、新しい型を定義するために使用できるキーワードがあります。これは単に既存の型ですが、より厳密なアラインメント (typedef など) を使用します。
typedef char Maximally_Aligned_Char alignas( max_align_t );
typename Tを指定して、型の元の「自然な」アラインメントをプログラムで決定する方法はありますか? コンパイルされる次の概念的なnatural_alignment_oftype_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 が「テンプレート引数の属性を無視する」ことについて警告していることがわかりました。