次のスニペットの何が問題になっていますか?
#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;
}
g++-4.3 でコンパイルしようとすると、cv -qualifier オーバーロードされた関数が両方tr1::mem_fn<>
を混同tr1::bind<>
し、次のエラーが発生するようです。
no matching function for call to ‘bind(<unresolved overloaded function type>,...
代わりに、次のスニペットはコンパイルされますが、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);
どんな手掛かり?