C++模板参数/类歧义
在使用不同版本的 g++ 进行测试时,出现以下问题
template<class bra>
struct Transform<bra, void> : kernel::Eri::Transform::bra {
static const size_t ni = bra::A::size;
bra::A
被解释为 kernel::Eri::Transform::bra::A
,而不是g++ 4.1.2 的模板参数。另一方面,g++ 4.3 是正确的。
根据标准,什么才是正确的行为?
同时,我稍微重构一下,让问题消失。
while testing with different version of g++, the following problem came up
template<class bra>
struct Transform<bra, void> : kernel::Eri::Transform::bra {
static const size_t ni = bra::A::size;
bra::A
is interpreted as kernel::Eri::Transform::bra::A
, rather than template argument by g++ 4.1.2. on the other hand, g++ 4.3 gets it right.
what should be correct behavior according to standard?
Meanwhile, I refactor slightly to make problem go away.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在我看来 gcc 4.1.2 是正确的。 §14.6.1/7(ISO/IEC 14882,C++03):
Seems to me like gcc 4.1.2 was right. §14.6.1/7 (ISO/IEC 14882, C++03):