Я хочу проверить, является ли тип экземпляром конкретного шаблона во время компиляции.
Например:
-
std::vector<int>
- это экземплярstd::vector
-
std::array<int, 5>
является экземпляромstd::array
Я могу сделать тест, который работает для случая 1, но не работает для случая 2.
#include <iostream>
#include <type_traits>
#include <string>
#include <vector>
#include <array>
#include <queue>
template<template<typename...> class, typename...>
struct is_instantiation : public std::false_type {};
template<template<typename...> class U, typename... T>
struct is_instantiation<U, U<T...>> : public std::true_type {};
int main() {
using A = std::vector<int>;
std::cout << is_instantiation<std::vector, A>::value << "\n";
std::cout << is_instantiation<std::queue, A>::value << "\n";
// std::cout << is_instantiation<std::array, A>::value << "\n";
}
Как заставить его работать в обоих случаях?
Я пробовал авто, но не могу заставить его работать.