fork download
  1. #include <vector>
  2. class A {
  3. public:
  4. A() {}
  5. };
  6.  
  7. template<typename T>
  8. void foo(const T &p) {
  9. union {
  10. typename std::remove_const<
  11. typename std::remove_reference<
  12. decltype(p[0])
  13. >::type
  14. >::type
  15. must_be_POD;
  16.  
  17. } bar;
  18. }
  19.  
  20. int main() {
  21. int b[10];
  22. A c[10];
  23. int *d = b;
  24. A *e = c;
  25. foo(std::vector<int>(1)); // OK
  26. foo(b); // OK
  27. foo(d); // OK
  28. // foo(std::vector<A>(1)); // ERROR
  29. // foo(c); // ERROR
  30. // foo(e); // ERROR
  31. return 0;
  32. }
  33.  
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
Standard output is empty