1

Boost :: Interprocessを使用しようとしていますが、gcc4.1.2でコンパイルしようとするとコンパイラエラーが発生します。コードを絞り込み、ブーストなしで問題を再現することができました。コードは次のとおりです。

#include <iostream>
static const std::size_t offset_type_alignment = 0;

template<class T, class U>
struct pointer_to_other;

template<class T, class U, template<class> class Sp>
struct pointer_to_other< Sp<T>, U >
/*144*/{
   typedef Sp<U> type;
};

template <class PointedType, class DifferenceType, class OffsetType, std::size_t OffsetAlignment>
class offset_ptr
{
};
template <class T, class DifferenceType = std::ptrdiff_t, class OffsetType = std::size_t, std::size_t Alignment = offset_type_alignment>
class offset_ptr;


template<class T, class T2, class T3, std::size_t A, class U>
/*158*/struct pointer_to_other<offset_ptr<T, T2, T3, A>, U >
{
   typedef offset_ptr<U, T2, T3, A> type;
};


template<class VoidPointer>
class message_queue_t
{
   typedef VoidPointer                                                 void_pointer;
/*167*/   typedef typename pointer_to_other<void_pointer, char>::type         char_ptr;
};

int main()
{
/*177*/       message_queue_t< offset_ptr<void, std::ptrdiff_t, std::size_t, offset_type_alignment> > test;
}

私が得るエラー:

.cc:message_queue_tのインスタンス化>

.cc:177:ここからインスタンス化

.cc:167:エラー:structpointer_to_other、char>のあいまいなクラステンプレートのインスタンス化

.cc:144:エラー:候補は次のとおりです:structpointer_to_other、U>

.cc:158:エラー:struct pointer_to_other、U>

.cc:167:エラー:未定義の型の無効な使用âstructpointer_to_other、char>

.cc:140:エラー:âstructpointer_to_other、char>âの宣言

MSVSでは、これは正常にコンパイルされます。Ideoneも正常にコンパイルされますが、gcc4.3.4を使用します

重要

  • コンパイラの変更は問題外です
  • Boost::Interprocessはこのバージョンのgccではテストされていません。

私が探しているのは回避策です。何か案は?

PS-テンプレートはブーストの一部ですが、削減されているため、実際に変更することはできません。私が変更できる方法はありますか?

 message_queue_t< offset_ptr<void, std::ptrdiff_t, std::size_t, offset_type_alignment> > test;

それを機能させるために?

4

1 に答える 1

1

これはコンパイラの制限です。単にサポートされていません。

于 2012-05-24T12:34:00.283 に答える