Hey guys, I have a question regarding inheritance in C++ on GCC. Now I've asked this question in the past but I'd like to expound on it a little so we can have a less hackish approach to this system. I know GCC follows the C++98 standard very well and its the standard that's at fault for this little idiom, but I'd like to override it if possible. Basically when a class inherits another class, specifically with templates I believe, some of the methods within the first inherited class become unaccessible without the "this->" operator (or a "using" construct; the code is bellow). Now I know the better way of working this is to use multiple inheritance with virtual interfaces, but if possible I'd like to break the C++ standard right here for a moment, and enable GCC to compile the code without complaining about this particular ABI. Is there a way to do this? I don't think -fpermissive works, but would one of the older standards? Thanks guys. ===== Code ======= #include <iostream> #include <string> #include <list> using namespace std; template <typename T> class SelfOrganizingList: public list<T> { public: bool contains(const T& t) { typename list<T>::iterator it = find(this->begin(), this->end(), t); if (it == this->end()) return false; if (it != this->begin()) { erase(it); push_front(t); } return true; } }; typedef SelfOrganizingList<string> List; // defines List type typedef List::iterator It; // defines It type void print(List& list) { cout << "size = " << list.size(); if (list.size() == 0) cout << ":\t()\n"; else { It it = list.begin(); cout << ":\t(" << *it++; while (it != list.end()) cout << "," << *it++; cout << ")\n"; } } int main() { cout << "List of computer languages using SelfOrganizingList<string>...\n"; List langs; langs.push_back("C"); print(langs); langs.push_back("Pascal"); print(langs); langs.push_back("Java"); print(langs); langs.push_back("C++"); print(langs); langs.push_back("Fortran");print(langs); cout << "\nHere is the sorted list:\n"; langs.sort(); print(langs); if (langs.contains("Pascal")) cout << "Accessed Pascal in list, so it should move to the front:\n"; print(langs); if (langs.contains("C++")) cout << "Accessed C++ in list so C++ should now move to the front:\n"; print(langs); }