Я играю с форсированным вариантом и натолкнулся на сценарий, который кажется проблематичным, но я чувствую, что я не знаю, как правильно использовать вариант boost. Вот маленький тестер программы я соединялОшибка модификатора C++
main.cpp
#include <boost/variant.hpp>
#include <iostream>
#include <stdint.h>
typedef boost::variant<uint16_t, uint32_t> MyInt;
int main()
{
uint16_t regular = 11;
MyInt custom = regular;
std::cout << custom << '\n';
return 0;
}
ИТАК выше работает отлично, но я получаю сообщение об ошибке при попытке выполнить следующие действия:
int16_t invalid = 11;
MyInt custom = invalid; // This line causes the error.
Я ожидал получить ошибку, но ошибка не говорит мне, где моя проблема на самом деле произошла в моей основной, но в классах Boost, которая не является наиболее полезной при работе в более крупном проекте.
Я начал изучать побуждение посетителей размещать ошибку в главном, но не совсем понял, как эти проблемы могут решить мою проблему здесь. Я нахожусь на правильном пути с посетителями или я пропущу что-то еще?
Edit:
Реальный вопрос здесь является недействительным назначение любого типа, не указанных в моем варианте (то есть символ, станд :: строка, двойной и т.д.) не столько преобразования int16_t в uint16_t.
где именно Вы добавляете эти две строки? (Кстати, у вас есть тип-o в имени myInt) –
Как насчет использования другого компилятора? Clang 3.7 предоставляет очень полезное сообщение об ошибке для этого кода. Он также указывает источник ошибки на строку 'MyInt custom = invalid; // Эта строка вызывает ошибку. ' – rettichschnidi
Нет опечатки в MyInt, это typedef, и я заменяю первые 2 строки в основном с ними @ RichardHodges – MrJman006