6

过去可以使用一些 C++ 编译器来检查模板类型是否已经被实例化,以便以下程序语法编译时不会出错:

template <typename T> struct MyStruct { };

// some magic goes here

int main () {
    static_assert(!is_instantiated<MyStruct<int>>(), "failure");
    MyStruct<int> a;
    static_assert(is_instantiated<MyStruct<int>>(), "failure");
}

“魔法”就在这个问题的解决方案中:

编译时模板实例化检查

但是 - 这不再适用于最近的 GCC 和 Clang 版本(Godbolt.org)。此外,为该问题编写已接受答案的用户已离开 SO 并且不会更新它......

所以,我的问题是:是否可以可靠地检查类/结构模板是否已为某种类型实例化?

笔记:

  • 寻找使用 C++11 的解决方案 - 不是以后的任何事情。
  • “这是不可能的”是一个有效的答案,但 - 只有当你能证明它是合理的。
  • 相关:这个问题
  • 如果它更容易,您可以假设该类可以实例化;但最好不要。
4

0 回答 0