Не удается экспортировать частичную специализацию из модуля C ++ 20C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Не удается экспортировать частичную специализацию из модуля C ++ 20

Сообщение Anonymous »

Я использую инсайдеры Visual Studio 2026, с новейшим компилятором MSVC и версией C ++.
Следующий код не компилируется: < /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'
(Неупорядоченная карта, строка 73).
Однако, когда я добавляю эту бесполезную строку в main.cpp , код правильно компилируется:

Код: Выделить всё

import Test;

int main()
{
std::hash::F; //new line
std::unordered_map map;
}
это просто ошибка компилятора, или есть какое -то взаимодействие с модулями и частичными специализациями, которые я просто не понимаю?

Подробнее здесь: https://stackoverflow.com/questions/797 ... c20-module
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»