Раньше с помощью некоторых компиляторов 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 - ничего позже.
- "Это невозможно »- это правильный ответ, но - только если вы можете его оправдать.
- Похожие: Этот вопрос .
- Если это облегчит задачу, вы можете предположим, что класс можно создать; но лучше не делать.