Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gcc下的不完整类型错误,不应是这种情况_C++_C++11_Templates_Gcc_Incomplete Type - Fatal编程技术网

C++ gcc下的不完整类型错误,不应是这种情况

C++ gcc下的不完整类型错误,不应是这种情况,c++,c++11,templates,gcc,incomplete-type,C++,C++11,Templates,Gcc,Incomplete Type,这个问题与最近的一个问题有关,因此: 下面的代码 struct MyClass {void doThings() {}}; template<class MemberFunc> struct Foo { MyClass object_; void call() { auto ptr = MemberFunc{}; (object_.*ptr)(); } }; int main() { Foo<decltype(

这个问题与最近的一个问题有关,因此:

下面的代码

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();
}
struct MyClass{void doThings(){};
模板
结构Foo{
MyClass对象;
无效调用(){
自动ptr=MemberFunc{};
(object.*ptr)();
}
};
int main(){
富富,;
foo.call();
}
应该(imo)编译,尽管它会由于取消对函数成员的空初始化指针的引用而导致segfault。链接问题的答案解释了SEGFULT的原因以及如何修复。但是,我不明白为什么代码没有在GCC6.2下编译,编译器会抛出错误

错误:“MemberFunc ptr”在自动ptr=MemberFunc{}中的类型不完整

这里没有不完整的类型,
MemberFunc
在编译器执行模板实例化时完全定义


另一方面,Clang 3.7编译它(和预期的segfaults),请参阅。

似乎只有在使用大括号语法时才会出现
MemberFunc()
工作正常。@0x499602D2闻起来像是一个bug。类似的错误有a和“无法转换”错误有a。是的,这是一个错误。@W.F.谢谢,这可能是一个奇怪的解析错误。一个导致内部错误。。。