При передаче вперед объявленной 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
Соответствует ли приведенный выше пример стандарту, или он использует расширение?