Boost :: вариант работает с std :: string? - PullRequest
4 голосов
/ 24 сентября 2011

Я написал простую программу на C ++ с использованием Boost :: Вариант. Код программы представлен ниже.

    #include <string>
    #include <iostream>
    #include <boost/variant.hpp>

    int main (int argc, char** argv)
    {
        boost::variant<int, std::wstring> v;
        v = 3;
        std::cout << v << std::endl;
        return 0;
    }

Но когда я пытаюсь скомпилировать это командой

g++ main.cpp -o main -lboost_system

я получаю

/usr/include/boost/variant/detail/variant_io.hpp:64: error: no match for ‘operator<<’ in ‘((const boost::detail::variant::printer<std::basic_ostream<char, std::char_traits<char> > >*)this)->boost::detail::variant::printer<std::basic_ostream<char, std::char_traits<char> > >::out_ << operand’

с последующим набором функций-кандидатов.

Что мне не хватает? Самое смешное, что когда я использую std::string вместо std::wstring, все прекрасно работает.

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 24 сентября 2011

Проблема в том, что wstring не может быть << в cout. Попробуйте использовать wcout вместо этого. Это не проблема с вариантом.

2 голосов
/ 24 сентября 2011

Используйте wcout, а не cout.Потому что вы используете wstring, а не string.

std::wcout <<  v << std::endl;
   //^^^^ note

Демо: http://ideone.com/ynf15

...