为什么我不能constexpr绑定?

Jon*_*Mee 4 c++ bind functor constexpr c++11

所以说我想制作一些constexpr仿函数,虽然我可以使用它bind.有什么我想念的吗?为什么不能bind退货constexpr

鉴于:

struct foo {
    int b() const { return _b; }
    int a() const { return _a; }
    int r() const { return _r; }
    const int _b;
    const int _a;
    const int _r;
};
Run Code Online (Sandbox Code Playgroud)

我想要:

constexpr auto sumB = bind(plus<int>(), placeholders::_1, bind(&foo::b, placeholders::_2));
constexpr auto sumA = bind(plus<int>(), placeholders::_1, bind(&foo::a, placeholders::_2));
constexpr auto sumR = bind(plus<int>(), placeholders::_1, bind(&foo::r, placeholders::_2));
Run Code Online (Sandbox Code Playgroud)

有什么我可以做的工作吗?

eca*_*mur 5

制作bindconstexpr 没有技术障碍; 例如,Sprout C++库具有constexpr启用的绑定.

但是,不允许实现将constexpr添加到标准中未指定的函数签名,并且还没有任何建议将constexpr添加到bind我所知道的内容中(C++ 14标准库的哪些部分可以是和哪些部分将成为constexpr?).一个人即将到来的可能性很小,因为bind主要被 lambda表达式所取代,而对于C++ 17,它自动被constexpr:

constexpr auto sumB = [](int x, foo const& y) { return x + y.b(); };
Run Code Online (Sandbox Code Playgroud)