在gcc 4.1.2上,Boost进程失败

时间:2012-04-19 10:02:00

标签: c++ templates gcc

我正在尝试使用Boost :: Interprocess,但在尝试使用 gcc 4.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&gt;

     

.cc:177:从这里实例化

     

.cc:167:错误:模糊的类模板   struct pointer_to_other的实例化,char&gt;

     

.cc:144:错误:   候选人是:struct pointer_to_other,U&gt;

     

.cc:158:错误:struct   pointer_to_other,U&gt;

     

.cc:167:错误:无效使用未定义类型   结果pointer_to_other,char&gt;

     

.cc:140:错误:âstruct的声明   pointer_to_other,   炭&gt;一种

在MSVS中,编译很好。 Ideone编译也很好,但它使用 gcc 4.3.4

重要

  • 改变编译器是不可能的
  • 我知道Boost :: Interprocess没有使用此版本的gcc进行测试

我正在寻找的是一种解决方法。有什么想法吗?

PS - 模板是提升的一部分,但是减少了,所以我无法真正改变它们。有什么方法可以改变:

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

为了让它发挥作用?

1 个答案:

答案 0 :(得分:1)

这是编译器限制。它根本不受支持。