我尝试编译相同的代码,但是我使用g ++成功并且在使用msvc12时失败了。这是代码:
template <typename T>
struct kernel_type
{
typedef T ret;
};
template <typename TAG, typename A, typename B, unsigned OFFSET = 0>
struct binary_op_
{
typedef typename kernel_type<A>::ret a1;
enum
{
offset_a1 = 16 - ((16 - 1 + OFFSET) % 16) - 1,
offset_a2 = 16 - ((16 - 1 + (OFFSET + offset_a1 + sizeof(a1))) % 16) - 1
};
};
offset_a2表达式中offset_a1引起的错误,msvc12编译器无法导出offset_a1表达式。如果我用其完整表达式替换offset_a1,则错误是固定的。任何人都知道这里发生了什么,或者我错过了更改msvc12中的任何设置?