Как решить эту проблему, связанную с модулем C 20?

#c #visual-studio #visual-studio-2019 #c 20

Вопрос:

Я столкнулся с проблемой при попытке использовать новые функции C (модуль), код выглядит следующим образом:

 //Module.ixx
export module Module;

import <string>;
import <iterator>;
import <sstream>;
import <iomanip>;
import <cstdint>;

template<typename T>
class blake_mixin
{
public:

};

template<typename T, size_t N>
struct stream_width_fixer
{
    stream_width_fixer(T value) : v(value) {}
    T v;
};

template<typename T, size_t N>
std::ostreamamp; operator<<(std::ostreamamp; ostr, const stream_width_fixer<T, N>amp; value)
{
    return ostr << std::setw(N) << value.v;
}

template<typename T>
struct null_mixin
{
    //for example
    void sample()
    {
        std::ostringstream someone;
    }
};

class blake_provider
{
public:
    static const bool is_xof = false;

    blake_provider(size_t hashsize)
    {
        
    }

    ~blake_provider()
    {
        
    }
};

template<class HashProvider, template <class> class Mixin = null_mixin>
class hasher : public Mixin<HashProvider>
{
public:

    template<typename H = HashProvider>
    hasher(size_t hashsize) : provider(hashsize)
    {

    }
    template<typename H = HashProvider>
    inline std::string hexdigest() const
    {
        std::ostringstream res;
        res << std::setfill('0') << std::hex;
        return res.str();
    }


private:
    friend Mixin<HashProvider>;
    HashProvider provider;
};

export typedef hasher<blake_provider, blake_mixin> blake;
//main.cpp
import Module;
int main()
{
    blake(256).hexdigest();
}
 

Пожалуйста, простите за загроможденность кода, код не имеет практического значения и используется только для демонстрации проблемы. Поскольку я хочу задавать вопросы более кратко, я упростил многие детали, но проблема предельно ясна. Мне нужно только добавить эту строку кода в любой класс, и он будет успешно скомпилирован,

     void sample()
    {
        std::ostringstream someone;
    }
 

но я думаю, что такое поведение бессмысленно, и я застрял в замешательстве, пожалуйста, скажите мне, где я ошибаюсь. Большое спасибо
Если этот код не добавлен, появится сообщение об ошибке

 (68,28): error C2079: 'res' uses undefined class 'std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char>>'
 

Инструмент разработки, который я использую, — VS2019, и я также пробовал его на VS2020, и они столкнутся с той же проблемой.

Комментарии:

1. Я не уверен, что понимаю. Ошибка возникает в hexdigest. Что означает фраза «Мне нужно только добавить эту строку кода в любой класс, и он будет успешно скомпилирован…» Можете ли вы уточнить: что вы добавляете к тому, что устраняет ошибку?

2. Спасибо вам за ваш ответ. Я пересмотрел вопрос, чтобы его было легче понять. Меня до сих пор беспокоит этот вопрос. Я с нетерпением жду вашего ответа.