#include <functional>
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string const input = "The quick brown fox.";
std::regex const words("[^\\s]+");
auto f = std::mem_fn(&std::smatch::str);
std::sregex_iterator i = std::sregex_iterator(input.begin(), input.end(), words);
std::smatch m = *i;
string first_word = f(m);
return 0;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHJlZ2V4PgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkKewoJc3RyaW5nIGNvbnN0IGlucHV0ID0gIlRoZSBxdWljayBicm93biBmb3guIjsKCXN0ZDo6cmVnZXggY29uc3Qgd29yZHMoIlteXFxzXSsiKTsKCglhdXRvIGYgPSBzdGQ6Om1lbV9mbigmc3RkOjpzbWF0Y2g6OnN0cik7CglzdGQ6OnNyZWdleF9pdGVyYXRvciBpID0gc3RkOjpzcmVnZXhfaXRlcmF0b3IoaW5wdXQuYmVnaW4oKSwgaW5wdXQuZW5kKCksIHdvcmRzKTsKCXN0ZDo6c21hdGNoIG0gPSAqaTsKCglzdHJpbmcgZmlyc3Rfd29yZCA9IGYobSk7CgkKCXJldHVybiAwOwp9
prog.cpp: In function 'int main()':
prog.cpp:17:25: error: no match for call to '(std::_Mem_fn<std::basic_string<char> (std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >::*)(unsigned int) const>) (std::smatch&)'
string first_word = f(m);
^
In file included from prog.cpp:1:0:
/usr/include/c++/5/functional:582:2: note: candidate: template<class ... _Args, class _Req> std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::result_type std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::operator()(std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::_Class&, _Args&& ...) const [with _Args = {_Args ...}; _Req = _Req; _MemFunPtr = std::basic_string<char> (std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >::*)(unsigned int) const; bool __is_mem_fn = true]
operator()(_Class& __object, _Args&&... __args) const
^
/usr/include/c++/5/functional:582:2: note: template argument deduction/substitution failed:
/usr/include/c++/5/functional:589:2: note: candidate: template<class ... _Args, class _Req> std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::result_type std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::operator()(std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::_Class&&, _Args&& ...) const [with _Args = {_Args ...}; _Req = _Req; _MemFunPtr = std::basic_string<char> (std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >::*)(unsigned int) const; bool __is_mem_fn = true]
operator()(_Class&& __object, _Args&&... __args) const
^
/usr/include/c++/5/functional:589:2: note: template argument deduction/substitution failed:
prog.cpp:17:25: note: cannot convert 'm' (type 'std::smatch {aka std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >}') to type 'std::_Mem_fn_base<std::basic_string<char> (std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >::*)(unsigned int) const, true>::_Class&& {aka const std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >&&}'
string first_word = f(m);
^
In file included from prog.cpp:1:0:
/usr/include/c++/5/functional:599:2: note: candidate: template<class ... _Args, class _Req> std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::result_type std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::operator()(std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::_Class*, _Args&& ...) const [with _Args = {_Args ...}; _Req = _Req; _MemFunPtr = std::basic_string<char> (std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >::*)(unsigned int) const; bool __is_mem_fn = true]
operator()(_Class* __object, _Args&&... __args) const
^
/usr/include/c++/5/functional:599:2: note: template argument deduction/substitution failed:
prog.cpp:17:25: note: cannot convert 'm' (type 'std::smatch {aka std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >}') to type 'std::_Mem_fn_base<std::basic_string<char> (std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >::*)(unsigned int) const, true>::_Class* {aka const std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >*}'
string first_word = f(m);
^
In file included from prog.cpp:1:0:
/usr/include/c++/5/functional:607:2: note: candidate: template<class _Tp, class ... _Args, class _Req> std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::result_type std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::operator()(_Tp&&, _Args&& ...) const [with _Tp = _Tp; _Args = {_Args ...}; _Req = _Req; _MemFunPtr = std::basic_string<char> (std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >::*)(unsigned int) const; bool __is_mem_fn = true]
operator()(_Tp&& __object, _Args&&... __args) const
^
/usr/include/c++/5/functional:607:2: note: template argument deduction/substitution failed:
/usr/include/c++/5/functional:618:2: note: candidate: template<class _Tp, class ... _Args, class _Req> std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::result_type std::_Mem_fn_base<_MemFunPtr, __is_mem_fn>::operator()(std::reference_wrapper<_Tp>, _Args&& ...) const [with _Tp = _Tp; _Args = {_Args ...}; _Req = _Req; _MemFunPtr = std::basic_string<char> (std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >::*)(unsigned int) const; bool __is_mem_fn = true]
operator()(reference_wrapper<_Tp> __ref, _Args&&... __args) const
^
/usr/include/c++/5/functional:618:2: note: template argument deduction/substitution failed:
prog.cpp:17:25: note: 'std::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >' is not derived from 'std::reference_wrapper<_Tp>'
string first_word = f(m);
^