namespace X
{
template<typename T, unsigned int SIZE>
bool IsArray (T (&a)[SIZE]) { return true; }
template<typename T>
bool IsArray (T *p) { return false; }
}
namespace Y
{
typedef char (&yes)[2];
template<typename T, unsigned int SIZE>
yes IsArray (T (&a)[SIZE]);
template<typename T>
char IsArray (T *p);
}
using namespace X;
int main ()
{
const char *s2 = "hello";
#if 1
if(true == IsArray(s2))
throw 0;
#else
if(sizeof(IsArray(s2)) == sizeof(yes))
throw 0;
#endif
}
bmFtZXNwYWNlIFgKewogIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBTSVpFPgogIGJvb2wgSXNBcnJheSAoVCAoJmEpW1NJWkVdKSB7IHJldHVybiB0cnVlOyB9CiAgCiAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICBib29sIElzQXJyYXkgKFQgKnApIHsgcmV0dXJuIGZhbHNlOyB9Cn0KICAKbmFtZXNwYWNlIFkKewogIHR5cGVkZWYgY2hhciAoJnllcylbMl07CiAgCiAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50IFNJWkU+CiAgeWVzIElzQXJyYXkgKFQgKCZhKVtTSVpFXSk7CiAgCiAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICBjaGFyIElzQXJyYXkgKFQgKnApOwp9Cgp1c2luZyBuYW1lc3BhY2UgWDsKCmludCBtYWluICgpCnsKICBjb25zdCBjaGFyICpzMiA9ICJoZWxsbyI7CiNpZiAxCiAgaWYodHJ1ZSA9PSBJc0FycmF5KHMyKSkKICAgIHRocm93IDA7CiNlbHNlCiAgaWYoc2l6ZW9mKElzQXJyYXkoczIpKSA9PSBzaXplb2YoeWVzKSkKICAgIHRocm93IDA7CiNlbmRpZgp9Cg==