Из любопытства я пробовал альтернативную реализацию конструкции is_class , используя трюк sizeof ()
. Ниже приведен код:
template
struct is_class
{
typedef char (&yes)[7];
typedef char (&no)[3];
static yes check (int T::*);
static no check (...);
enum { value = (sizeof(check(0)) == sizeof(yes)) };
};
Проблема в том, что когда я создаю экземпляр is_class
, он дает ошибку компиляции:
error: creating pointer to member of non-class type ‘int’
Теперь мой вопрос, если int T :: *
неприменимо для int
(или void *
и т. д.), тогда почему не ошибка замены для да, проверьте
. Не следует ли компилятору выбирать без проверки
?