title: How register overloaded template member function in ChaiScript?
body: <p>I have the next definition class:</p>
  
  <pre><code>class MyType {
  public:
      template &lt;typename T&gt;
      MyType&amp; put(const std::string&amp; s, T&amp;&amp; val);
  
      template &lt;typename T&gt;
      MyType&amp; put(size_t pos, T&amp;&amp; val);
  
      template &lt;typename M, typename T, typename = std::enable_if_t&lt;std::is_same&lt;MyType, std::decay_t&lt;M&gt;&gt;::value&gt;&gt;
      MyType&amp; put(const M&amp; o, T&amp;&amp; val);
  }
  </code></pre>
  
  <p>How is the right way to register overloaded template member functions <code>MyType::put</code> in ChaiScript v6.0.0?</p>
  
  <p>I am trying specialized value template (Discussed in: <a href="http://discourse.chaiscript.com/t/issues-with-adding-templated-and-or-overloaded-operators/19/3" rel="nofollow noreferrer">http://discourse.chaiscript.com/t/issues-with-adding-templated-and-or-overloaded-operators/19/3</a>):</p>
  
  <pre><code>chai.add(chaiscript::fun(static_cast&lt;MyType&amp; (MyType::*)(const std::string&amp;, uint64_t)&gt;(&amp;MyType::put&lt;uint64_t&gt;), "put");
  </code></pre>
  
  <p>But not compile because there several candidate function.</p>