fork(10) download
  1. #include <iostream>
  2. #include <string>
  3. #include <type_traits>
  4. using namespace std;
  5.  
  6.  
  7. string to_string(const string& s) { return s; }
  8. string to_string(const char* s) { return s; }
  9.  
  10.  
  11. template<typename... Args>
  12. string stringer(Args&&... args)
  13. {
  14. std::string result;
  15. using std::to_string;
  16. int unpack[]{0, (result += to_string(forward<Args>(args)), 0)...};
  17. static_cast<void>(unpack);
  18. return result;
  19. }
  20.  
  21. int main() {
  22. string a = stringer("a");
  23. string b = stringer(1);
  24. string c = stringer(a, b);
  25. string d = stringer(1, a, 2, b, 3.0);
  26. cout << a << endl;
  27. cout << b << endl;
  28. cout << c << endl;
  29. cout << d << endl;
  30. return 0;
  31. }
Compilation error #stdin compilation error #stdout 0s 3432KB
stdin
Standard input is empty
compilation info
prog.cpp: In instantiation of ‘std::string stringer(Args&& ...) [with Args = const char (&)[2]; std::string = std::basic_string<char>]’:
prog.cpp:22:25:   required from here
prog.cpp:16:61: error: call of overloaded ‘to_string(const char [2])’ is ambiguous
     int unpack[]{0, (result += to_string(forward<Args>(args)), 0)...};
                                                             ^
prog.cpp:16:61: note: candidates are:
In file included from /usr/include/c++/4.8/string:52:0,
                 from /usr/include/c++/4.8/bits/locale_classes.h:40,
                 from /usr/include/c++/4.8/bits/ios_base.h:41,
                 from /usr/include/c++/4.8/ios:42,
                 from /usr/include/c++/4.8/ostream:38,
                 from /usr/include/c++/4.8/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/4.8/bits/basic_string.h:2864:3: note: std::string std::to_string(int) <near match>
   to_string(int __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2864:3: note:   no known conversion for argument 1 from ‘const char [2]’ to ‘int’
/usr/include/c++/4.8/bits/basic_string.h:2869:3: note: std::string std::to_string(unsigned int) <near match>
   to_string(unsigned __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2869:3: note:   no known conversion for argument 1 from ‘const char [2]’ to ‘unsigned int’
/usr/include/c++/4.8/bits/basic_string.h:2875:3: note: std::string std::to_string(long int) <near match>
   to_string(long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2875:3: note:   no known conversion for argument 1 from ‘const char [2]’ to ‘long int’
/usr/include/c++/4.8/bits/basic_string.h:2880:3: note: std::string std::to_string(long unsigned int) <near match>
   to_string(unsigned long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2880:3: note:   no known conversion for argument 1 from ‘const char [2]’ to ‘long unsigned int’
/usr/include/c++/4.8/bits/basic_string.h:2886:3: note: std::string std::to_string(long long int) <near match>
   to_string(long long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2886:3: note:   no known conversion for argument 1 from ‘const char [2]’ to ‘long long int’
/usr/include/c++/4.8/bits/basic_string.h:2892:3: note: std::string std::to_string(long long unsigned int) <near match>
   to_string(unsigned long long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2892:3: note:   no known conversion for argument 1 from ‘const char [2]’ to ‘long long unsigned int’
prog.cpp: In instantiation of ‘std::string stringer(Args&& ...) [with Args = std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&; std::string = std::basic_string<char>]’:
prog.cpp:24:26:   required from here
prog.cpp:16:61: error: no matching function for call to ‘to_string(std::basic_string<char>&)’
     int unpack[]{0, (result += to_string(forward<Args>(args)), 0)...};
                                                             ^
prog.cpp:16:61: note: candidates are:
In file included from /usr/include/c++/4.8/string:52:0,
                 from /usr/include/c++/4.8/bits/locale_classes.h:40,
                 from /usr/include/c++/4.8/bits/ios_base.h:41,
                 from /usr/include/c++/4.8/ios:42,
                 from /usr/include/c++/4.8/ostream:38,
                 from /usr/include/c++/4.8/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/4.8/bits/basic_string.h:2864:3: note: std::string std::to_string(int)
   to_string(int __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2864:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘int’
/usr/include/c++/4.8/bits/basic_string.h:2869:3: note: std::string std::to_string(unsigned int)
   to_string(unsigned __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2869:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘unsigned int’
/usr/include/c++/4.8/bits/basic_string.h:2875:3: note: std::string std::to_string(long int)
   to_string(long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2875:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘long int’
/usr/include/c++/4.8/bits/basic_string.h:2880:3: note: std::string std::to_string(long unsigned int)
   to_string(unsigned long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2880:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘long unsigned int’
/usr/include/c++/4.8/bits/basic_string.h:2886:3: note: std::string std::to_string(long long int)
   to_string(long long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2886:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘long long int’
/usr/include/c++/4.8/bits/basic_string.h:2892:3: note: std::string std::to_string(long long unsigned int)
   to_string(unsigned long long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2892:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘long long unsigned int’
/usr/include/c++/4.8/bits/basic_string.h:2898:3: note: std::string std::to_string(float)
   to_string(float __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2898:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘float’
/usr/include/c++/4.8/bits/basic_string.h:2907:3: note: std::string std::to_string(double)
   to_string(double __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2907:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘double’
/usr/include/c++/4.8/bits/basic_string.h:2916:3: note: std::string std::to_string(long double)
   to_string(long double __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2916:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘long double’
prog.cpp: In instantiation of ‘std::string stringer(Args&& ...) [with Args = int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, double; std::string = std::basic_string<char>]’:
prog.cpp:25:37:   required from here
prog.cpp:16:61: error: no matching function for call to ‘to_string(std::basic_string<char>&)’
     int unpack[]{0, (result += to_string(forward<Args>(args)), 0)...};
                                                             ^
prog.cpp:16:61: note: candidates are:
In file included from /usr/include/c++/4.8/string:52:0,
                 from /usr/include/c++/4.8/bits/locale_classes.h:40,
                 from /usr/include/c++/4.8/bits/ios_base.h:41,
                 from /usr/include/c++/4.8/ios:42,
                 from /usr/include/c++/4.8/ostream:38,
                 from /usr/include/c++/4.8/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/4.8/bits/basic_string.h:2864:3: note: std::string std::to_string(int)
   to_string(int __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2864:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘int’
/usr/include/c++/4.8/bits/basic_string.h:2869:3: note: std::string std::to_string(unsigned int)
   to_string(unsigned __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2869:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘unsigned int’
/usr/include/c++/4.8/bits/basic_string.h:2875:3: note: std::string std::to_string(long int)
   to_string(long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2875:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘long int’
/usr/include/c++/4.8/bits/basic_string.h:2880:3: note: std::string std::to_string(long unsigned int)
   to_string(unsigned long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2880:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘long unsigned int’
/usr/include/c++/4.8/bits/basic_string.h:2886:3: note: std::string std::to_string(long long int)
   to_string(long long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2886:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘long long int’
/usr/include/c++/4.8/bits/basic_string.h:2892:3: note: std::string std::to_string(long long unsigned int)
   to_string(unsigned long long __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2892:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘long long unsigned int’
/usr/include/c++/4.8/bits/basic_string.h:2898:3: note: std::string std::to_string(float)
   to_string(float __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2898:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘float’
/usr/include/c++/4.8/bits/basic_string.h:2907:3: note: std::string std::to_string(double)
   to_string(double __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2907:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘double’
/usr/include/c++/4.8/bits/basic_string.h:2916:3: note: std::string std::to_string(long double)
   to_string(long double __val)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2916:3: note:   no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘long double’
stdout
Standard output is empty