#include <ios>

struct A {};

int getFormatIPIndex()
{
	static int const i = std::ios_base::xalloc();
	return i;
}

enum flag_t { Hello, World };

struct setflag
{
	flag_t flag;

	setflag( flag_t f ) :
		flag{f} {}
};

#include <ostream>

std::ostream& operator<<( std::ostream& os, setflag a )
{
    os.iword(getFormatIPIndex()) = a.flag;
    return os;
}

std::ostream& operator<<( std::ostream& os, A )
{
	auto index = os.iword(getFormatIPIndex());

	if( index == Hello )
		os << "Hello ";
	else if( index == World )
		os << "World";

	return os;
}

#include <iostream>

int main()
{
	std::cout << setflag(Hello) << A{} << setflag(World) << A{};
}
