default-constructing tags causes incompleteness problems with clang