namespace Array
{
  template<typename T> class _ischararray_;
  
  template<typename T, int N> 
  class _ischararray_<T[N]> { public: static bool _ischararray(){return true;}}; 

  template<typename T> 
  class _ischararray_<T*> { public: static bool _ischararray(){return false;}};
  
  template<class T> 
  bool isCharArray(const T& x) { return _ischararray_<T>::_ischararray();} 
}

using namespace Array;
#include <iostream>

int main ()
{
   const char s1[]  = "hello-1";
   const char *s2   = "hello-2";
   if(isCharArray("hello-3"))  std::cout<<"hello-3 char array"<<std::endl;
   if(isCharArray(s1)) std::cout<<"s1 char array"<<std::endl;
   if(isCharArray(s2)) std::cout<<"s2 char array"<<std::endl;
  
}