"using typename" vs gcc version
Bonjour,
je me suis fait une petite classe Map qui hérite de std::map et j'ai un souci de compilation selon la version de gcc :
Voici le début de ma classe :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
template <typename Key,typename Value> class Map : public std::map<Key,Value>
{
public:
using typename std::map<Key,Value>::const_iterator ;
using std::map<Key,Value>::operator [] ;
using std::map<Key,Value>::insert ;
using std::map<Key,Value>::begin ;
using std::map<Key,Value>::find ;
using std::map<Key,Value>::end ;
Map & add ( const Map & other )
{
for ( const_iterator i = other.begin() ; i != other.end() ; ++i ) // <--- ligne de l'erreur
(*this)[i->first] = i->second ;
return *this ;
} |
avec la version de gcc 5.3.1, ça compile sans problème et sans warning.
Avec la version 4.4.7, j'ai cette erreur :
Code:
1 2 3
| In member function "common::Map<Key, Value>& common::Map<Key, Value>::add(const common::Map<Key, Value>&)":
error: expected ";" before "i"
error: "i" was not declared in this scope |
Et là, mes maigres connaissances de c++ trouvent leur limite...
Y a-t-il moyen de trouver une syntaxe équivalente qui compile avec les 2 versions de gcc ?
Merci d'avance !