请考虑以下事项:
template <unsigned >
struct uint_ { };
template <class >
struct X {
static constexpr bool value = false;
};
template <int I> // NB: int, not unsigned
struct X<uint_<I>> {
static constexpr bool value = true;
};
int main() {
static_assert(X<uint_<0>>::value, "!");
}
clang编译代码,gcc不编译。
但是,在以下高度相关的例子中:
template <unsigned >
struct uint_ { };
template <int I> // NB: int, not unsigned
void foo(uint_<I> ) { }
int main() {
foo(uint_<0>{} );
}
两个编译器都拒绝,没有匹配函数调用foo
。 gcc的行为是一致的,clang不是 - 所以一个或另一个编译器有一个或两个例子的错误。哪个编译器是正确的?
答案 0 :(得分:7)
海湾合作委员会是正确的。 [temp.deduct.type]/17:
如果
P
的表单包含<i>
,并且表单的类型为A
相应的i
值与line=(some pixel values); cc=bwconncomps(bwimage); tempvar=[]; for i=1:length(bwconncomps) tempvar=find(cc.PixelIdxList{i}==line); end [~ answer]=max(tempvar);
的类型不同,扣除失败。