提问人:Luchian Grigore 提问时间:4/19/2012 更新时间:5/24/2012 访问量:432
升压进程间在 gcc 4.1.2 上失败
Boost interprocess fails on gcc 4.1.2
问:
我正在尝试使用 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 >
.cc:177:从此处实例化
.cc:167:错误:不明确的类模板 struct pointer_to_other char 的实例化>
.cc:144:错误: 候选人是:struct pointer_to_other、U>
.cc:158:错误:结构 pointer_to_other,U>
.cc:167:错误:未定义类型的使用无效 “结构pointer_to_other,char>
.cc:140:错误:声明 âstruct pointer_to_other, 字符>
在 MSVS 中,这编译良好。Ideone 也可以编译,但它使用 gcc 4.3.4。
重要
- 更改编译器是不可能的
- 我知道 Boost::Interprocess 没有用这个版本的 gcc 进行测试
我正在寻找的是一种解决方法。有什么想法吗?
PS - 模板是 boost 的一部分,但减少了,所以我无法真正更改它们。有什么方法可以改变:
message_queue_t< offset_ptr<void, std::ptrdiff_t, std::size_t, offset_type_alignment> > test;
为了让它起作用?
答:
1赞
Luchian Grigore
5/24/2012
#1
这是编译器的限制。它根本不受支持。
评论
0赞
nikhil
5/20/2013
您能否添加一个确认此限制的来源。
0赞
Luchian Grigore
5/20/2013
@nikhil哇,这是一年多前的事了,我几乎不记得我在问什么,更不用说我是如何得出这个结论的了。
0赞
nikhil
5/21/2013
哦,好吧,我被类似的问题咬了。
评论