J'ai écrit le code suivant à infixes une classe templated:Un modèle de modèle peut-il être spécialisé pour les types fondamentaux comme les modèles standards?
template<template<typename...> class C, typename A, typename B>
struct infix_t
{
typedef C<A, B> type;
};
template<template<typename...> class C, class A>
constexpr infix_t<C, A> operator<(A, infix_t<C>)
{
return {};
}
template<template<typename...> class C, typename A, typename B>
constexpr C<A, B> operator>(infix_t<C, A>, B)
{
return {};
}
Cela me permet d'écrire a <same_as> b
où same_as
est de type infix_t<std::is_same>
. Toutefois, si le type a
ou b
est un type fondamental, j'obtiens template template argument has different template parameters...
; si j'essaie de redéclarer infix_t
pour accepter les types fondamentaux, j'obtiens template argument ... must be a class template or alias template
. Je pensais que les modèles sur les noms de types pourraient accepter les fondamentaux de toute façon. Est-ce parce que c'est un modèle de modèle, et que les règles sont différentes, ou est-ce que je me contente d'aborder ce problème?
pourrait vous montrer par exemple d'appeler un code qui donne cette erreur? – TemplateRex
Quel est le point de cette syntaxe bizarre? – Columbo
En réalité, il n'est pas nécessaire d'appeler pour donner cette erreur - les erreurs se produisent lorsque j'essaie de spécialiser le modèle. Cependant, mon utilisation prévue est 'auto infixed = infix_t' où 'other' est un template sur un typename et un fondamental, comme' std :: integral_constant'. –