Dieses bestimmte Stück Code schlägt auf gcc 5.4 fehl, funktioniert aber auf vielen anderen, msvc 2015, clang und neueren Versionen von gcc.Anonyme Struktur, um die Funktionskonvertierung zu beschleunigen, scheitert an gcc 5.4
#include <boost/function.hpp>
#include <map>
#include <string>
typedef boost::function1<int, double> fn;
class fn_map : public std::map<std::string, fn> {
public:
void reg(const std::string&, fn);
};
int main(int, char**) {
fn_map fm;
struct {
int operator()(double v) {
return static_cast<int>(v * 2.);
}
} factory;
fm.reg("factory", factory);
}
void fn_map::reg(const std::string& nm, fn f) {
this->insert(std::make_pair(nm, f));
}
Fehlermeldung:
no known conversion for argument 2 from 'main(int, char**)::<anonymous struct>' to 'fn {aka boost::function1<int, double>}'
Die letzte ubuntu LTS noch gcc hat 5, so dass, wenn möglich, möchte ich diesen Code haben, auch dort zu arbeiten.