fork(1) download
  1. #include <type_traits>
  2.  
  3. template <class T>
  4. class Base {
  5. static_assert(!std::is_default_constructible<T>::value,
  6. "T must not be default constructible");
  7. };
  8.  
  9. struct X1 : Base<X1> {};
  10. struct X2 : Base<X2> {
  11. X2() = default;
  12. };
  13. struct X3 : Base<X3> {
  14. X3() {};
  15. };
  16. struct X4 : Base<X4> {
  17. X4() : Base{} {};
  18. };
  19.  
  20. struct Y1 {};
  21.  
  22. int main() {
  23. X1 x1; X2 x2; X3 x3; X4 x4; // all compile. They shouldn't
  24. // all compile. They shouldn't:
  25. Base<X1> bx1; Base<X2> bx2; Base<X3> bx3; Base<X4> bx4;
  26. // Base<Y1> y1; // static assert fires. This is the expected behavior
  27. }
Success #stdin #stdout 0s 3452KB
stdin
Standard input is empty
stdout
Standard output is empty