Другой синтаксис шаблона для определения, является ли аргумент классом или нет

Читая этот вопрос , я наткнулся на ответ @Johannes .

template struct void_ { typedef void type; };

template  // Line 1
struct is_class { static bool const value = false; };

template
struct is_class::type> { // Line 2
  static bool const value = true; 
};

Эта конструкция определяет, является ли данный тип типом класс или нет . Что меня озадачивает, так это новый синтаксис для написания этой небольшой метапрограммы. Может ли кто-нибудь подробно объяснить:

  1. Зачем нам нужна строка 1?
  2. Что означает синтаксис как параметр шаблона в строке 2?

10
задан Community 23 May 2017 в 12:07
поделиться