Не помню, где-то вычитал. Есть такая изящная штука, именуемая STATIC_ASSERT. Она именно выдает ошибку на этапе компиляции (обычный ASSERT - на этапе выполнения). Выглядит примитивно, но не тривиально. Два но: 1. катит только на C++ 2. на разных компиляторах выдает совершенно различную интерпретацию кода ошибки, но точно показывает строку, где эта ошибка возникает. Я просто в комментарии к этой строке пишу, что здесь контролируется.