У меня есть два разных файла с одинаковым именем класса (здесь: A).Класс используется в шаблонной специализации.Специализированный шаблон используется при инициализации статического объекта.Я ожидаю, что компилятор использует локальный класс для решения шаблона, но, как показывает результат, он требует двукратной специализации.
Вопрос в том, как предотвратить создание такого кода (может быть, некоторые настройки компилятора для его обнаружения), так как этодействительно трудно отладить?
------- template.h
template <typename T>
void Test() {
T* t = new T();
delete t;
}
------- classA1.cpp
#include <iostream>
#include "template.h"
class A {
public:
A() {
std::cout << "Hello I'm class A(1)" << std::endl;
}
};
struct Tester1 {
Tester1() {
Test<A>();
}
};
static Tester1 tester1;
------- classA2.cpp
#include <iostream>
#include "template.h"
class A {
public:
A() {
std::cout << "Hello I'm class A(2)" << std::endl;
}
};
struct Tester2 {
Tester2() {
Test<A>();
}
};
static Tester2 tester2;
------- main.cpp
#include <iostream>
int main() {
std::cout << "Hello from main!" << std::endl;
return 0;
};
Результат:
Hello I'm class A(1)
Hello I'm class A(1)
Hello from main!