我搜索了SE,答案似乎已经6岁以上了,这些解决方案不适用于
GTest
的最新API,无论如何都是1.10.x
。
我试图将自己的编译错误传播到最真实的程度,并且能够
找到众所周知的最小的,可复制的,无效的示例:
#include "gtest/gtest.h"
#include <memory>
template<class K, class V>
class Bar {
virtual ~Bar()= default;
};
namespace {
template<typename T>
class MyFooTest: public testing::Test {
std::unique_ptr<T> x;
std::unique_ptr<Bar<int,char>> bar;
public:
MyFooTest() {
x= std::make_unique<T>();
bar= std::make_unique<Bar<int,char>>();
}
~MyFooTest() override { x= nullptr; };
};
template class MyFooTest<bool>;
template class MyFooTest<int>;
#if GTEST_HAS_TYPED_TEST_P
using testing::Types;
TYPED_TEST_SUITE_P(MyFooTest);
TYPED_TEST_P( MyFooTest, ConstructorDestructor) {
ASSERT_EQ(42,42);
}
REGISTER_TYPED_TEST_SUITE_P(MyFooTest,ConstructorDestructor);
typedef ::testing::Types<MyFooTest<int>,MyFooTest<bool>> impls;
INSTANTIATE_TYPED_TEST_SUITE_P( impl_test, MyFooTest, impls);
#endif // GTEST_HAS_TYPED_TEST_P
}
int main( int argc, char **argv ) {
testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}
此代码无法编译,我知道我缺少有关虚拟构造函数/析构函数和模板的信息。但是,一年前,在以前的GTest
发行版中,曾经有过类似的工作