#include <iostream>

#include <string>

namespace safer {
	template<class CharT,
	  class Traits = std::char_traits<CharT>,
	  class Allocator = std::allocator<CharT>,
	  class Base = std::basic_string<CharT, Traits, Allocator>
	>
	struct basic_string:
	   Base
	{
	  using Base::Base;
	  basic_string( CharT const* ptr ):
	    Base( ptr?Base(ptr):Base() )
	  {}
	  template<class T,
	    typename std::enable_if<std::is_same<T, int>::value, bool>::type = true
	  >
	  basic_string(T&&)=delete;
	};
	using string = basic_string<char>;
	using wstring = basic_string<wchar_t>;
}

void crash(const safer::string& s) {}
int main()
{
    try
    {
        crash(0);
    }
    catch (const std::exception& ex)
    {
        // never gets here!
        std::cout << "got" << ex.what() << std::endl;
    }
}

int main() {
	// your code goes here
	return 0;
}