小编PiQ*_*uer的帖子

英特尔C++编译器(icpc 14.0):"这里不允许派生类"

我在Linux上使用ICC 14.0.2.此代码段与GCC和CLang编译,但不编译ICC:

template<int N, bool B>
struct A;

template<int N>
struct A<N,false>
{
  template<int M>
  struct Nested {};
};

template<int N>
struct A<N,true> : public A<N,false> {};

template struct A<1,true>::Nested<2>;    // explicit instantiation
Run Code Online (Sandbox Code Playgroud)

尝试用三个编译器编译它:

$ g++ -c -std=c++11 testcase.cc
$ clang++ -c -std=c++11 testcase.cc
$ icpc -c -std=c++11 testcase.cc
testcase.cc(17): error: invalid qualifier for "A<1, false>::Nested<2>" (a derived class is not allowed here)
  template struct A<1,true>::Nested<2>;
                             ^

compilation aborted for testcase.cc (code 2)
Run Code Online (Sandbox Code Playgroud)

我找不到有关此错误消息的任何有用信息.

在我的例子中,显式实例化(更复杂的类)是单元测试的一部分,我可以通过实例化一个对象来解决问题,ICC愉快地编译:

void foo()
{
  A<1,true>::Nested<2>();
} …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors icc language-lawyer

7
推荐指数
1
解决办法
437
查看次数

标签 统计

c++ ×1

compiler-errors ×1

icc ×1

language-lawyer ×1