#include <iostream>

struct Parameters
{
	Parameters &val()
	{
		return *this;
	}
};

void f(const Parameters &)
{
	std::cout << "const Parameters &\n";
}

void f(Parameters &)
{
	std::cout << "Parameters &\n";
}

template<typename T>
T &i_know_what_i_am_doing(const T &params)
{
	return const_cast<T&>(params);
}

int main(int argc,char *argv[])
{
	f(Parameters());
	f(Parameters().val().val());
	f(i_know_what_i_am_doing(Parameters()));
	return 0;
}
