fork download
  1. #include <type_traits>
  2.  
  3. template<class F, class S>
  4. struct pair_base {
  5. template<bool true_ = true
  6. ,typename std::enable_if
  7. < std::is_default_constructible<F>::value
  8. && std::is_default_constructible<S>::value
  9. && true_
  10. , int
  11. >::type = 0
  12. >
  13. pair_base() : first(), second() {}
  14. F first;
  15. S second;
  16. };
  17.  
  18. template<class F, class S>
  19. struct pair : private pair_base<F,S> {
  20. using pair_base<F,S>::first;
  21. using pair_base<F,S>::second;
  22. };
  23.  
  24. static_assert(std::is_default_constructible<pair<int,int>>::value, "");
  25. static_assert(!std::is_default_constructible<pair<int&,int&>>::value, "");
  26.  
  27. int main() {}
  28.  
Success #stdin #stdout 0s 3092KB
stdin
Standard input is empty
stdout
Standard output is empty