fork download
  1. #include <iostream>
  2. #include <set>
  3. #include <string>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. template<typename T>
  8. void check_emplace_back(T& t, ...) {
  9. cout << "T does not have emplace_back()" << endl;
  10. }
  11.  
  12. template<typename T>
  13. auto check_emplace_back(T& t, int)
  14. -> decltype((void)t.emplace_back()) {
  15. cout << "T does have emplace_back()!" << endl;
  16. t.emplace_back();
  17. }
  18.  
  19.  
  20. int main() {
  21. double d{};
  22. check_emplace_back(d, 0);
  23.  
  24. set<string> ss{};
  25. check_emplace_back(ss, 0);
  26.  
  27. vector<int> vi{};
  28. check_emplace_back(vi, 0);
  29.  
  30. return 0;
  31. }
Success #stdin #stdout 0s 5272KB
stdin
Standard input is empty
stdout
T does not have emplace_back()
T does not have emplace_back()
T does have emplace_back()!