Bonjour à tous

J'utilise le tag dispatching et la spécialisation partielle pour spécialiser des classes, par exemple en vector :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
class any_tag;
 
template<typename T, typename Tag>
struct vector {};
 
template<typename T>
struct vector<T, any_tag> {};
J'utilise également dans un cas un std::vector comme spécialisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
class std_vector_tag;
 
template<typename T>
struct vector<T, std_vector_tag> : private std::vector<T>
{};
Je suis alors obligé d'exposer les fonctionnalités de std::vector :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
vector(size_type n = 0, const T& value= T()) : std::vector<T>(n, value) {}
reference operator[] (size_type n) { return operator[] (n); }
const_reference operator[] (size_type n) const { return operator[] (n); }
// etc.
(j'utilise l'héritage privé puisque le destructeur de std::vector est public et non virtuel)

Peut-on quand même se permettre d'utiliser l'héritage public dans ce cas ? (question purement rhétorique, ça resterait dangereux a priori)

En fait, ce qui m'intéresserait, c'est d'utiliser un template alias pour créer un alias de std::vector dans le cas d'une spécialisation partielle. Par exemple quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
template<class T>
using vector<T, std_vector_tag> = std::vector<T>;
Si quelqu'un a une idée si c'est faisable et comment.
Merci

EDIT : en fait, chez moi (gcc 4.7 ubuntu 11.04), les templates alias et la directive -std=c++11 ne fonctionnent pas alors que normalement, ça devrait fonctionner. Un idée ?
gcc version 4.7.0 20111010 (experimental) [trunk revision 179769] (Ubuntu/Linaro 20111010-0ubuntu1)
gcc: error: unrecognized command line option '-std=c++11'