fork(1) download
  1. namespace X
  2. {
  3. template<typename T, unsigned int SIZE>
  4. bool IsArray (T (&a)[SIZE]) { return true; }
  5.  
  6. template<typename T>
  7. bool IsArray (const T *&p) { return false; }
  8. }
  9.  
  10. namespace Y
  11. {
  12. typedef char (&yes)[2];
  13.  
  14. template<typename T, unsigned int SIZE>
  15. yes IsArray (T (&a)[SIZE]);
  16.  
  17. template<typename T>
  18. char IsArray (const T *&p);
  19. }
  20.  
  21.  
  22. int main ()
  23. {
  24. char s1[] = "hello";
  25. const char *s2 = "hello";
  26. #if 1
  27. using namespace X;
  28. if(true == IsArray(s2))
  29. throw 0;
  30. if(false == IsArray("12345"))
  31. throw 0;
  32. if(false == IsArray(s1))
  33. throw 0;
  34. #else
  35. using namespace Y;
  36. if(sizeof(IsArray(s2)) == sizeof(yes))
  37. throw 0;
  38. if(sizeof(IsArray(s1)) != sizeof(yes))
  39. throw 0;
  40. #endif
  41. }
Success #stdin #stdout 0.01s 2720KB
stdin
Standard input is empty
stdout
Standard output is empty