Является ли следующий законным?
template< typename T >
struct tree_node
{
T t;
std::vector<tree_node> children;
};
Комментарий к этому сообщению кажется, что это не так.
EDIT: Это не влияет на меня как тип сценария типа undefined. Предполагаемая семантика недвусмысленна. Если это недопустимое использование неполного типа, тогда это должна быть ошибка времени компиляции.
В моих тестах это кажется прекрасным (я использовал оба GCC и Clang - оба с -Wall -Werror -std=c++11
).
Есть ли что-то в определении языка (до С++ 17), которое прямо или косвенно определяет это как поведение undefined, или оно просто недоопределено?
Имейте в виду, что это очень похоже, структурно, на что-то вроде следующего:
typedef int T;
struct tree_node;
struct tree_node
{
T t;
tree_node * children;
}