c – decltype作为类成员函数中的返回类型

我在下面的代码编译错误.
struct B{
    double operator()(){
        return 1.0;
    }
};

struct A {
    auto func() -> decltype(b())
    {
        return b();
    }

    B b;
};

但是,如果我重组A,它会编译.

gcc 4.8表示在这个范围内没有声明’b’.

struct A {
    B b;
    auto func() -> decltype(b())
    {
        return b();
    }
};

那么,第一个怎么了?

解决方法

对类的定义进行了两次处理:首先收集成员声明,​​包括函数签名,然后对定义的主体进行解析.

因此,函数体可以访问所有成员声明,​​包括后续的声明,但是函数原型只能看到前面的声明.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...