std::atomic<T*> : pas d'opérateur -> ?
Bonjour,
Je découvre actuellement les joies de la programmation concurrente, et suis tombé sur un bel article faisant usage de std::atomic<T*> pour créer une file thread safe et sans lock.
Dans cet article justement, l'auteur (Herb Sutter) utilise le type std::atomic<T*> comme s'il s'agissait d'un pointeur normal, c'est à dire en substance :
Code:
1 2 3 4 5
| struct node {
node* next;
};
std::atomic<node*> some_node = ...;
some_node = some_node->next; |
Or, j'ai beau regarder dans mon implémentation (GCC 4.7) et sur les sites décrivant la nouvelle norme C++11 (click), il n'est fait mention nulle part que std::atomic<T*> dispose d'un T* operator -> () (i.e. le code ci-dessus génère une erreur à la ligne 5).
J'ai donc deux questions :
- Sutter fume-t-il de l'herbe ?
- Pourquoi cet opérateur n'est-il pas ajouté à la spécialisation de std::atomic<T> pour T = U* ?
Si vous connaissez la réponse à la seconde (la première m'intéresse moins), je suis intéressé.