#include <string>
#include <map>
class Object
{
public:
Object(std::map<std::string, void(*)(const std::string&)> MAP)
{/*...code...*/};
};
class Main
{
public:
void testFunc(const std::string& A)
{
}
void construct()
{
Object{
std::map<std::string, void(*)(const std::string&)> {
{"exit", [](const std::string &A){ exit(1); }},
//{"test", (void(::Main*)(const std::string&))&testFunc},
//{"test", [](const std::string &A){ testFunc(A); }},
//{"test", [this](const std::string &A){ testFunc(A); }},
{"NULL", NULL}
}
};
~Object();
}
};
int main()
{
Main _Main;
_Main.construct();
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPG1hcD4KCmNsYXNzIE9iamVjdAp7CnB1YmxpYzoKCU9iamVjdChzdGQ6Om1hcDxzdGQ6OnN0cmluZywgdm9pZCgqKShjb25zdCBzdGQ6OnN0cmluZyYpPiBNQVApCgkJey8qLi4uY29kZS4uLiovfTsKfTsKCmNsYXNzIE1haW4KewpwdWJsaWM6Cgl2b2lkIHRlc3RGdW5jKGNvbnN0IHN0ZDo6c3RyaW5nJiBBKQoJewoJCQoJfQoKCXZvaWQgY29uc3RydWN0KCkKCXsKCQlPYmplY3R7CiAgICAJCXN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCB2b2lkKCopKGNvbnN0IHN0ZDo6c3RyaW5nJik+IHsKICAgICAgCQkJeyJleGl0IiwgW10oY29uc3Qgc3RkOjpzdHJpbmcgJkEpeyBleGl0KDEpOyB9fSwKICAgICAgCQkJLy97InRlc3QiLCAodm9pZCg6Ok1haW4qKShjb25zdCBzdGQ6OnN0cmluZyYpKSZ0ZXN0RnVuY30sCiAgICAgIAkJCS8veyJ0ZXN0IiwgW10oY29uc3Qgc3RkOjpzdHJpbmcgJkEpeyB0ZXN0RnVuYyhBKTsgfX0sCiAgICAgIAkJCS8veyJ0ZXN0IiwgW3RoaXNdKGNvbnN0IHN0ZDo6c3RyaW5nICZBKXsgdGVzdEZ1bmMoQSk7IH19LAogICAgICAJCQl7Ik5VTEwiLCBOVUxMfQogICAgCQl9CiAgCQl9OwogIAkJCiAgCQl+T2JqZWN0KCk7Cgl9Cn07CgppbnQgbWFpbigpCnsKCU1haW4gX01haW47CglfTWFpbi5jb25zdHJ1Y3QoKTsKfQ==
prog.cpp: In member function 'void Main::construct()':
prog.cpp:24:55: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&Main::testFunc' [-fpermissive]
{"test", (void(Main::*)(const std::string&))&testFunc},
^
prog.cpp:28:7: error: no matching function for call to 'std::map<std::basic_string<char>, void (*)(const std::basic_string<char>&)>::map(<brace-enclosed initializer list>)'
}
^
In file included from /usr/include/c++/5/map:61:0,
from prog.cpp:2:
/usr/include/c++/5/bits/stl_map.h:273:9: note: candidate: template<class _InputIterator> std::map<_Key, _Tp, _Compare, _Alloc>::map(_InputIterator, _InputIterator, const _Compare&, const allocator_type&)
map(_InputIterator __first, _InputIterator __last,
^
/usr/include/c++/5/bits/stl_map.h:273:9: note: template argument deduction/substitution failed:
prog.cpp:28:7: note: cannot convert '{"NULL", 0}' (type '<brace-enclosed initializer list>') to type 'const std::less<std::basic_string<char> >&'
}
^
In file included from /usr/include/c++/5/map:61:0,
from prog.cpp:2:
/usr/include/c++/5/bits/stl_map.h:256:9: note: candidate: template<class _InputIterator> std::map<_Key, _Tp, _Compare, _Alloc>::map(_InputIterator, _InputIterator)
map(_InputIterator __first, _InputIterator __last)
^
/usr/include/c++/5/bits/stl_map.h:256:9: note: template argument deduction/substitution failed:
prog.cpp:28:7: note: candidate expects 2 arguments, 3 provided
}
^
In file included from /usr/include/c++/5/map:61:0,
from prog.cpp:2:
/usr/include/c++/5/bits/stl_map.h:239:9: note: candidate: template<class _InputIterator> std::map<_Key, _Tp, _Compare, _Alloc>::map(_InputIterator, _InputIterator, const allocator_type&)
map(_InputIterator __first, _InputIterator __last,
^
/usr/include/c++/5/bits/stl_map.h:239:9: note: template argument deduction/substitution failed:
prog.cpp:28:7: note: cannot convert '{"NULL", 0}' (type '<brace-enclosed initializer list>') to type 'const allocator_type& {aka const std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >&}'
}
^
In file included from /usr/include/c++/5/map:61:0,
from prog.cpp:2:
/usr/include/c++/5/bits/stl_map.h:233:7: note: candidate: std::map<_Key, _Tp, _Compare, _Alloc>::map(std::initializer_list<std::pair<const _Key, _Tp> >, const allocator_type&) [with _Key = std::basic_string<char>; _Tp = void (*)(const std::basic_string<char>&); _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >; std::map<_Key, _Tp, _Compare, _Alloc>::allocator_type = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >]
map(initializer_list<value_type> __l, const allocator_type& __a)
^
/usr/include/c++/5/bits/stl_map.h:233:7: note: candidate expects 2 arguments, 3 provided
/usr/include/c++/5/bits/stl_map.h:227:7: note: candidate: std::map<_Key, _Tp, _Compare, _Alloc>::map(std::map<_Key, _Tp, _Compare, _Alloc>&&, const allocator_type&) [with _Key = std::basic_string<char>; _Tp = void (*)(const std::basic_string<char>&); _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >; std::map<_Key, _Tp, _Compare, _Alloc>::allocator_type = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >]
map(map&& __m, const allocator_type& __a)
^
/usr/include/c++/5/bits/stl_map.h:227:7: note: candidate expects 2 arguments, 3 provided
/usr/include/c++/5/bits/stl_map.h:223:7: note: candidate: std::map<_Key, _Tp, _Compare, _Alloc>::map(const std::map<_Key, _Tp, _Compare, _Alloc>&, const allocator_type&) [with _Key = std::basic_string<char>; _Tp = void (*)(const std::basic_string<char>&); _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >; std::map<_Key, _Tp, _Compare, _Alloc>::allocator_type = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >]
map(const map& __m, const allocator_type& __a)
^
/usr/include/c++/5/bits/stl_map.h:223:7: note: candidate expects 2 arguments, 3 provided
/usr/include/c++/5/bits/stl_map.h:219:7: note: candidate: std::map<_Key, _Tp, _Compare, _Alloc>::map(const allocator_type&) [with _Key = std::basic_string<char>; _Tp = void (*)(const std::basic_string<char>&); _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >; std::map<_Key, _Tp, _Compare, _Alloc>::allocator_type = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >]
map(const allocator_type& __a)
^
/usr/include/c++/5/bits/stl_map.h:219:7: note: candidate expects 1 argument, 3 provided
/usr/include/c++/5/bits/stl_map.h:211:7: note: candidate: std::map<_Key, _Tp, _Compare, _Alloc>::map(std::initializer_list<std::pair<const _Key, _Tp> >, const _Compare&, const allocator_type&) [with _Key = std::basic_string<char>; _Tp = void (*)(const std::basic_string<char>&); _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >; std::map<_Key, _Tp, _Compare, _Alloc>::allocator_type = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >]
map(initializer_list<value_type> __l,
^
/usr/include/c++/5/bits/stl_map.h:211:7: note: no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'std::initializer_list<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >'
/usr/include/c++/5/bits/stl_map.h:196:7: note: candidate: std::map<_Key, _Tp, _Compare, _Alloc>::map(std::map<_Key, _Tp, _Compare, _Alloc>&&) [with _Key = std::basic_string<char>; _Tp = void (*)(const std::basic_string<char>&); _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >]
map(map&& __x)
^
/usr/include/c++/5/bits/stl_map.h:196:7: note: candidate expects 1 argument, 3 provided
/usr/include/c++/5/bits/stl_map.h:185:7: note: candidate: std::map<_Key, _Tp, _Compare, _Alloc>::map(const std::map<_Key, _Tp, _Compare, _Alloc>&) [with _Key = std::basic_string<char>; _Tp = void (*)(const std::basic_string<char>&); _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >]
map(const map& __x)
^
/usr/include/c++/5/bits/stl_map.h:185:7: note: candidate expects 1 argument, 3 provided
/usr/include/c++/5/bits/stl_map.h:174:7: note: candidate: std::map<_Key, _Tp, _Compare, _Alloc>::map(const _Compare&, const allocator_type&) [with _Key = std::basic_string<char>; _Tp = void (*)(const std::basic_string<char>&); _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >; std::map<_Key, _Tp, _Compare, _Alloc>::allocator_type = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >]
map(const _Compare& __comp,
^
/usr/include/c++/5/bits/stl_map.h:174:7: note: candidate expects 2 arguments, 3 provided
/usr/include/c++/5/bits/stl_map.h:162:7: note: candidate: std::map<_Key, _Tp, _Compare, _Alloc>::map() [with _Key = std::basic_string<char>; _Tp = void (*)(const std::basic_string<char>&); _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, void (*)(const std::basic_string<char>&)> >]
map()
^
/usr/include/c++/5/bits/stl_map.h:162:7: note: candidate expects 0 arguments, 3 provided
prog.cpp:29:5: error: no matching function for call to 'Object::Object(<brace-enclosed initializer list>)'
};
^
prog.cpp:7:2: note: candidate: Object::Object(std::map<std::basic_string<char>, void (*)(const std::basic_string<char>&)>)
Object(std::map<std::string, void(*)(const std::string&)> MAP)
^
prog.cpp:7:2: note: conversion of argument 1 would be ill-formed:
prog.cpp:4:7: note: candidate: constexpr Object::Object(const Object&)
class Object
^
prog.cpp:4:7: note: conversion of argument 1 would be ill-formed:
prog.cpp:4:7: note: candidate: constexpr Object::Object(Object&&)
prog.cpp:4:7: note: conversion of argument 1 would be ill-formed:
prog.cpp:31:13: error: no matching function for call to 'Object::Object()'
~Object();
^
prog.cpp:7:2: note: candidate: Object::Object(std::map<std::basic_string<char>, void (*)(const std::basic_string<char>&)>)
Object(std::map<std::string, void(*)(const std::string&)> MAP)
^
prog.cpp:7:2: note: candidate expects 1 argument, 0 provided
prog.cpp:4:7: note: candidate: constexpr Object::Object(const Object&)
class Object
^
prog.cpp:4:7: note: candidate expects 1 argument, 0 provided
prog.cpp:4:7: note: candidate: constexpr Object::Object(Object&&)
prog.cpp:4:7: note: candidate expects 1 argument, 0 provided