Следующий код не компилируется: < /p>
Код: Выделить всё
//Test.ixx
export module Test;
export import std;
export template
struct Foo {
size_t hash = 0;
};
namespace std {
template
struct hash {
using F = int;
size_t operator()(const Foo& f) const noexcept {
return hash{}(f.hash);
}
};
}
//main.cpp
import Test;
int main() {
std::unordered_map map; //multiple compiler errors
}
< /code>
С приведенным выше кодом я получаю следующие ошибки компилятора: 'std :: _ hash :: _ alnode. 'std :: _ hash ' < /code> (Неупорядоченная карта, строка 72),
'std::_Hash::_Alnode_traits': cannot access protected typedef declared in class 'std::_Hash'Однако, когда я добавляю эту бесполезную строку в main.cpp , код правильно компилируется:
Код: Выделить всё
import Test;
int main()
{
std::hash::F; //new line
std::unordered_map map;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... c20-module
Мобильная версия