Всем привет, сделал такой код, ожидал, что выдаст ошибку компилции, но все собралось
#include <iostream>
class Test
{
public:
// static void test()
// {
// some action
// }
};
template<class T>
class ITest
{
public:
void test()
{
T::test();
}
};
typedef ITest<Test> TTest;
int main()
{
TTest test;
return 0;
}
Как можно получить ошибку компиляции в таком коде. Сразу поясню зачем это нужно. Ведется разработка под микроконтроллеры и всякие наследования, вирт. функции там нежелательны, а сделать реализацию заменяемой для разных железок (при одинаковом использование в коде) хочется. Сейчас это сделано так
typdef ImplClass alias;
...
alias::Do();
где методы ImplClass - статические функции.
Появилось желание немного изменить концепцию и заставить компилятор проверять реализацию на соответствие интерфейсу. Но пока не выходит...
Поэтому у меня два вопроса: почему это компилится? как можно сделать то чего я хочу иначе?