Надежно проверить, был ли создан экземпляр шаблона класса в C ++ 11? - PullRequest
4 голосов
/ 03 апреля 2020

Раньше с помощью некоторых компиляторов 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");
}

"magi c" "был в решении этого вопроса:

Проверка экземпляра шаблона времени компиляции

Однако - что больше не работает (Godbolt.org) с последние версии G CC и Clang. Кроме того, пользователь, который написал принятый ответ на этот вопрос, покинул SO и не будет обновлять его ...

Итак, мой вопрос: Можно ли надежно проверить, существует ли шаблон класса / структуры был создан экземпляр для определенного типа?

Примечания:

  • Ищете решение с использованием C ++ 11 - ничего позже.
  • "Это невозможно »- это правильный ответ, но - только если вы можете его оправдать.
  • Похожие: Этот вопрос .
  • Если это облегчит задачу, вы можете предположим, что класс можно создать; но лучше не делать.
...