Действительно ли безымянный параметр передается во время вызова функции?

template <typename TAG>
fn(int left, TAG, int right)
{
}

fn(0, some_type_tag(), 1);
/* or */
fn(0,int(), 1); // where the primitive, int, is not empty.

РЕДАКТИРОВАТЬ: Есть две точки зрения на этот вопрос.

  1. Объявление функции против определения. В объявлении параметр может не указываться, но в объявлении может быть указано. Это не интересная перспектива.
  2. Перспектива шаблона, особенно в метапрограммировании. Рассматриваемый параметр - это тег, используемый для извлечения мета-структуры из признака. Вот почему параметр не имеет имени, меня интересует только информация времени компиляции - тип тега.

/ EDIT

Мои теги обычно являются пустыми структурами, однако в некоторых частях моего кода они являются typedefs примитивных типов, поэтому мне интересно узнать, действительно ли современные компиляторы передают параметр. Это имеет два аспекта.

  1. Определение размера стека, с учетом размера безымянного типа параметра.
  2. Фактическое построение стека с переданным значением.

Оставим его в gcc 4.5 и msvc 2008+

17
задан camh 20 May 2011 в 14:06
поделиться