Вывод. У меня есть фрагмент кода, который отлично компилируется с помощью g++, но не с clang.
Подробности:
У меня есть проект, который отлично компилируется с помощью g++, но при компиляции с clang я получаю сообщение об ошибке error: use of non-static data member
. Я попытался создать небольшой тестовый пример, который продемонстрирует проблему, но для небольшого тестового примера g++ выдал ту же ошибку, что и clang.
Я отправил файл из 236 строк в pastebin, демонстрирующий проблему: http://pastebin.com/DGnfxmYe.
При компиляции с g++ 4.6.3 все работает нормально. Но при компиляции с clang 3.2 я получаю следующие сообщения об ошибках:
myhashmap.hpp:169:29: error: use of non-static data member 'num_bins' of 'MyHashMap' from nested type 'iterator'
for (_index++; (_index < num_bins) && (bins[_index] == NULL); _index++)
^~~~~~~~
myhashmap.hpp:169:43: error: use of non-static data member 'bins' of 'MyHashMap' from nested type 'iterator'
for (_index++; (_index < num_bins) && (bins[_index] == NULL); _index++)
^~~~
myhashmap.hpp:171:17: error: use of non-static data member 'num_bins' of 'MyHashMap' from nested type 'iterator'
if (_index < num_bins) {
^~~~~~~~
myhashmap.hpp:172:17: error: use of non-static data member 'bins' of 'MyHashMap' from nested type 'iterator'
_theNode = bins[_index];
^~~~
Глядя на код, я понимаю, почему clang выдает эти сообщения об ошибках. Чего я не понимаю, так это почему g++ правильно скомпилировал код. Я не писал этот код, но я хотел бы, чтобы он компилировался с помощью clang. Поэтому я пытаюсь понять, что именно он делает. И мне было бы интересно понять, почему он компилируется с g++, а не с clang. Интерпретирует ли g++ стандарт С++ по-другому или есть какое-то расширение g++, которое использует код?