Могу ли я передать значение объявленного вперед перечисления?

При передаче вперед объявленной struct или класса необходимо передать ее функции через ссылку или указатель.

Но что можно сделать с объявленным наперед перечислением? Должно ли оно также передаваться через ссылку или указатель? Или его можно передать со значением?

Следующий пример прекрасно компилируется с помощью g++ 4.6.1 :

#include <iostream>

enum class E;

void foo( const E e );


enum class E
{
  V1,
  V2
};

void foo( const E e )
{
  switch ( e )
  {
    case E::V1 :
      std::cout << "V1"<<std::endl;
      break;
    case E::V2 :
      std::cout << "V2"<<std::endl;
      break;
    default:
      ;
  }
}

int main()
{
  foo( E::V1);
  foo( E::V2);
}

Для сборки :

g++ gy.cpp -Wall -Wextra -pedantic -std=c++0x -O3

Соответствует ли приведенный выше пример стандарту, или он использует расширение?

9
задан BЈовић 18 January 2012 в 13:47
поделиться