无法从大括号初始值设定项列表转换为向量

Could not convert from brace initializer list to vector

我在下面的代码中观察到编译错误 "error: could not convert '{{{&Foo::print_add}, {&X::print}}}' from '' to 'std::vector'"。

我是不是向量插入有误? 顺便说一句,我不想​​使用 push_back 方法。是否可以使用“=”插入。 我感觉这是语法错误,但找不到它。

google了一下,发现gcc的早期版本有bug。我使用的是 4.8.1,所以我假设我使用的库应该包含修复程序。

#include <functional>
#include <iostream>
#include <vector>

struct Foo {
  Foo(int num) : num_(num) {}
  void print_add(int i) const { std::cout << num_+i << '\n'; }
  int num_;
};

struct X {
  void print() {
    std::cout << "I'm in X "<<std::endl;
  }
};

struct XXX {
  std::function<void(const Foo&,int)> a;
  std::function<void(const X&)> b;
};

int main()
{
  std::vector<XXX> vec = 
  {  
     { 
        {&Foo::print_add},
        {&X::print}
    }
 };
}

X::print 是非 const 成员函数,因此指向它的指针不能用于初始化 std::function<void(const X&)>.