#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <algorithm>
#include <sstream>
#include <stack>
#include <string>
#include <vector>

struct NoTriviallyConstructible {
 public:
  NoTriviallyConstructible(int one, float two) {}
  int vl = 1;

 private:
  NoTriviallyConstructible() = delete;
};

struct NoCopyConstructible {
 public:
  NoCopyConstructible() = default;
  int vl = 1;

 private:
  NoCopyConstructible(const NoCopyConstructible&) = delete;
  void operator=(const NoCopyConstructible&) = delete;
};

template <class A, class B>
struct Convert;

template <>
struct Convert<NoTriviallyConstructible, int> {
  int operator()(const NoTriviallyConstructible& as) {
      return as.vl;
  }
};

template <>
struct Convert<NoCopyConstructible, NoTriviallyConstructible> {
  NoTriviallyConstructible operator()(const NoTriviallyConstructible& as) {
    return NoTriviallyConstructible(as.vl, 0.1);
  }
};

template <typename L, typename R>
class is_customly_convertible {
  template <typename A, typename B>
  static char test(decltype(&Convert<A, B>::operator()));
  template <typename A, typename B>
  static int test(...);

 public: 
  enum { value = sizeof(test<L, R>(0)) == sizeof(char) };
};