Was ist an dem folgenden Ausschnitt falsch?
#include <tr1/functional>
#include <functional>
#include <iostream>
using namespace std::tr1::placeholders;
struct abc
{
typedef void result_type;
void hello(int)
{ std::cout << __PRETTY_FUNCTION__ << std::endl; }
void hello(int) const
{ std::cout << __PRETTY_FUNCTION__ << std::endl; }
abc()
{}
};
int
main(int argc, char *argv[])
{
const abc x;
int a = 1;
std::tr1::bind(&abc::hello, x , _1)(a);
return 0;
}
Beim Versuch, es mit g++-4.3 zu kompilieren, scheint es, dass cv -Qualifier überladene Funktionen verwirren beide tr1::mem_fn<>
y tr1::bind<>
und es wird folgende Fehlermeldung angezeigt:
no matching function for call to ‘bind(<unresolved overloaded function type>,...
Stattdessen kompiliert das folgende Snippet, scheint aber die const-correctness :
struct abc
{
typedef void result_type;
void operator()(int)
{ std::cout << __PRETTY_FUNCTION__ << std::endl; }
void operator()(int) const
{ std::cout << __PRETTY_FUNCTION__ << std::endl; }
abc()
{}
};
...
const abc x;
int a = 1;
std::tr1::bind( x , _1)(a);
Haben Sie einen Hinweis?