Clang vs GCC:CRTP继承

时间:2016-09-06 07:51:45

标签: c++ gcc clang multiple-inheritance crtp

使用CRTP类作为另一个本身是CRTP类(相同类型)的类的基础是否有效?

Clang(3.8.1)接受以下示例:

#include <iostream>

template <typename T>
class Printable {};

template <typename T>
void print(const Printable<T>& p)
{
    static_cast<const T&>(p).print();
}

struct Foo : public Printable<Foo>
{
    void print() const { std::cout << "hello" << std::endl; }
};

struct Bar : public Foo, public Printable<Bar> {};

int main()
{
    Bar b;
    print(b);
}

GCC(6.1)没有:

error: no matching function for call to 'print(Bar&)' print(b);

谁是对的?

0 个答案:

没有答案