Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <functional>
- #include <string>
- struct Foo {
- Foo(int) {}
- Foo(std::string) {}
- operator int () const { return 42; }
- operator std::string () const { return ""; }
- void foo(std::function<void(Foo&, int)>f);
- void foo(std::function<void(const Foo&, int)>f) const; // xxx
- void foo(std::function<void(const std::string&, Foo&)>f);
- void foo(std::function<void(const std::string&, const Foo&)>f) const;
- void bar() const {
- this->foo([](const Foo&, int){}); // xxx
- }
- };
- g++ -std=c++11 -c -Wall amb.cpp
- amb.cpp: In member function ‘void Foo::bar() const’:
- amb.cpp:18:40: error: call of overloaded ‘foo(Foo::bar() const::<lambda(const Foo&, int)>)’ is ambiguous
- this->foo([](const Foo&, int){});
- ^
- amb.cpp:12:10: note: candidate: void Foo::foo(std::function<void(const Foo&, int)>) const
- void foo(std::function<void(const Foo&, int)>f) const;
- ^
- amb.cpp:15:10: note: candidate: void Foo::foo(std::function<void(const std::basic_string<char>&, const Foo&)>) const
- void foo(std::function<void(const std::string&, const Foo&)>f) const;
- ^
- #include <functional>
- void foo(std::function<void(int)>f);
- void foo(std::function<void(double)>f);
- void bar() {
- foo([](int){});
- }
- amb2.cpp: In function ‘void bar()’:
- amb2.cpp:8:18: error: call of overloaded ‘foo(bar()::<lambda(int)>)’ is ambiguous
- foo([](int){});
- ^
- amb2.cpp:4:6: note: candidate: void foo(std::function<void(int)>)
- void foo(std::function<void(int)>f);
- ^
- amb2.cpp:5:6: note: candidate: void foo(std::function<void(double)>)
- void foo(std::function<void(double)>f);
- ^
- this->foo(std::function<void(const Foo&, int)>([](const Foo&, int){}));
Add Comment
Please, Sign In to add comment