Рассмотрим следующий фрагмент кода:
struct S
{
union
{
int arr1[10];
char arr2[sizeof(arr1)];
};
};
Он успешно компилируется с gcc 4.9.2 в режиме С++ 03 и С++ 11. Однако, когда я изменяю S
как шаблон следующим образом:
template <size_t N>
struct S
{
union
{
int arr1[N];
char arr2[sizeof(arr1)];
};
};
Я получаю следующий вывод ошибки:
error: int S<10ul>::<anonymous union>::arr1 [10]’ is inaccessible
int arr1[N];
error: within this context
char arr2[sizeof(arr1)];
Clang компилирует обе версии только в режиме С++ 11. Мне любопытно, что здесь правильное поведение. Может быть, я должен явно указать, что размер arr2
sizeof(int) * N
?