//Refer to: http://m...content-available-to-author-only...y.com/2013/06/03/overriding-the-broken-universal-reference-t/
#include <iostream>

template<typename T>
void apply( T&& value ) {
    std::cout << "apply" << std::endl;
}

struct my_type { };
void apply( my_type && value ) {
	std::cout << "my_type" << std::endl;
}

int main() {
	apply( my_type() );
	my_type a;
	apply( a );
	apply( static_cast<my_type const>(a) );
	apply( static_cast<my_type const &>(a) );
}
