クラスconstruct<T>()
のメソッドを使用しようとすると、奇妙なコンパイル エラーが発生します。boost::interprocess::managed_shared_memory
Boost ライブラリを 1.48 バージョンで、GCC を 4.6.3 バージョンで使用しています。
問題は、managed_shared_memory object
(構造体のメンバーではない) を作成し、そのメソッドを使用してオブジェクトを構築しようとするとconstruct<T>()
、コンパイルが成功することです。
#include <boost/interprocess/managed_shared_memory.hpp>
namespace proc = boost::interprocess;
template <typename _T>
void TFunc() {
proc::managed_shared_memory mem;
mem = proc::managed_shared_memory(proc::create_only, "mem1", 1024);
int* ob1 = mem.construct<int>("i1") ();
}
ただし、managed_shared_memory
オブジェクトが構造体内で定義されてから作成されると、メソッドの使用法のコンパイルはconstruct<T>()
失敗します:
#include <boost/interprocess/managed_shared_memory.hpp>
namespace proc = boost::interprocess;
template <typename _T>
void TFunc() {
struct MemoryHandler {
proc::managed_shared_memory mem;
} handler;
handler.mem = proc::managed_shared_memory(proc::create_only, "mem2", 1024);
int* ob2 = handler.mem.construct<int>("i2") (); // failure
}
construct
次の GCC エラーで、使用方法の行を指しています。
error: expected primary-expression before 'int'
error: expected ',' or ';' before 'int'
残念ながら、Boost と GCC の別のバージョンに対してはテストしていないので、Boost/GCC のバグなのか機能なのかはわかりません。
誰かが同様のエラーに苦労したり、何が原因であるかを知っていますか?