Использование CRTP иногда я пишу такой код:Как избежать ошибок при использовании CRTP?
// this was written first
struct Foo : Base<Foo, ...>
{
...
};
// this was copy-pasted from Foo some days later
struct Bar : Base<Foo, ...>
{
...
};
И это очень трудно понять, что идет не так, пока я не трассировать код в отладчике и видеть, что члены Бара не используются в Base
.
Как выявить эту ошибку во время компиляции?
(я использую MSVC2010, так что я могу использовать некоторые C++ 0x функции и расширения MSVC языка)
на самом деле это не работает, если dtor никогда не вызывается. – Abyx
@Abyx: Интересно, что gcc 4.9, если я использую новое размещение для создания объекта типа 'struct S: base {}', он жалуется на то, что * конструктор * 'S :: S()' неявно удален из-за '~ base' является закрытым. Однако в этом случае деструктор никогда не вызывается. –
Более интересно, gcc 4.8.1 не жалуется вообще! –