Итак, я написал объект, который может обрабатывать JSON-подобный контент, примером которого является минимальный:
#include <iostream>
#include <vector>
#include <variant>
struct Array;
struct Value;
struct Array: public std::vector<Value>{
using std::vector<Value>::vector;
};
struct Value: public std::variant<bool, int, Array>{
using std::variant<bool, int, Array>::variant;
};
Теперь я хотел перегрузить оператор выходного потока. Вот код:
std::ostream& operator <<(std::ostream& os, const Value value);
std::ostream& operator <<(std::ostream& os, const Array array);
std::ostream& operator <<(std::ostream& os, const Array array){
for (auto &a : array){
os << a << ", ";
}
return os;
}
std::ostream& operator <<(std::ostream& os, const Value value){
os << value;
return os;
}
Теперь, если я попытаюсь запустить его:
int main()
{
Array a {1,2,3}; // OK
std::cout << a; // Segfault
}
Где подвох?
РЕДАКТИРОВАТЬ Как указывалось, был рекурсивный цикл.