	#include <iostream>
	#include <string>
	
	struct S {
		template<typename T>
		S(T t) { std::cout << "T t\n"; }
		
		std::string value_;
	};
	
	template<>
	S::S(std::string value) {
		std::cout << "string\n";
		value_ = std::move(value);
	}
	
	template<>
	S::S(const std::string&) {
		std::cout << "const string&\n";
	}
	
	int main() {
		S s1(42);
	
		std::string foo{"bar"};
		const std::string& foor = foo;
	    S s2(foo);
	    S s3(foor);
	}