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.谢谢,这可能是一个奇怪的解析错误。一个导致内部错误。。。