不应该是gcc下不完整的类型错误

时间:2016-11-20 19:33:43

标签: c++ c++11 templates gcc incomplete-type

这个问题与最近关于SO的问题有关:How to instantiate a member function pointer?

以下代码

struct MyClass {void doThings() {}};

template<class MemberFunc>
struct Foo {
    MyClass object_;
    void call() {
        auto ptr = MemberFunc{};
        (object_.*ptr)();
    }
};

int main() {
    Foo<decltype(&MyClass::doThings)> foo;
    foo.call();
}

应该(imo)编译,尽管由于解除引用指向函数成员的null初始化指针而导致段错误。链接问题的答案解释了为什么segfault以及如何解决它。但是,我不明白为什么代码在gcc 6.2下编译,编译器吐出错误

  

错误:&#39; MemberFunc ptr&#39; auto ptr = MemberFunc {};

中的类型不完整

Live on Coliru

此处没有不完整的类型,当编译器执行模板实例化时,MemberFunc已完全定义。

另一方面,Clang 3.7编译它(和预期的段错误一样),见here

0 个答案:

没有答案