4

私が理解できる限り、古いstack_allocアロケーターを置き換える新しいHinnant の short_alloc アロケーターを試してみたいと思います。ただし、ベクトルの例をコンパイルすることはできません。言います:g++

~# g++ -std=c++11 stack-allocator-test.cpp -o stack-allocator-test
In file included from stack-allocator-test.cpp:6:0:
short_alloc.h:11:13: error: ‘alignment’ is not a type
short_alloc.h:11:22: error: ISO C++ forbids declaration of ‘alignas’ with no type [-fpermissive]
short_alloc.h:11:22: error: expected ‘;’ at end of member declaration

私が知る限り、g++とについて不平をline 10言う11

static const std::size_t alignment = 16;
alignas(alignment) char buf_[N];

コンパイラはalignasの「式バージョン」を好まないようですが、「type-id バージョン」だけを期待しています。

g++ 4.7.2Ubuntu 12.10で使用しています。

~# g++ --version
g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2

おそらく私は明らかな何かを見逃していますが、それを理解することはできません。どんな助けでも大歓迎です。(新しいバージョンにアップグレードしなければならないなんて言わないでください。私はg++怠け者です :)

4

1 に答える 1

7

g++-4.7.2 はサポートしていませんalignashttp://gcc.gnu.org/projects/cxx0x.htmlから:

アライメントサポート | N2341 | GCC 4.8

g++-4.8.0 または clang を使用してみてください。または、次を使用できる場合があります__attribute__((aligned))

__attribute__((aligned (8))) char buf_[12];

__attribute__((aligned))特定の整数定数式 (リテラル、テンプレート パラメーター) のみを受け入れることに注意してください。static const変数を受け入れません。

于 2013-03-01T11:01:54.900 に答える