is_convertible doesn't seem to be the right test.   I'm trying to figure 
out if I can find a better one.

On Wednesday, January 27, 2016 at 4:48:56 PM UTC-8, [email protected] wrote:
>
> I have an overloaded function that can take either a std::string or a 
> Local<Value>, however, when I pass in a const char *, expecting to have the 
> std::string version selected, I instead get an ambiguity error.  I added 
> another version that takes a Local<Script> and that was added to the list 
> of compatible overloaded functions for my call.
>
> The constructor at 
> http://v8.paulfryzel.com/docs/master/include_2v8_8h_source.html line 332:
>
> template <class S>
> 333  V8_INLINE Local(S* that)
> 334  : val_(that) {}
>
> 336  T* val_;
>
> is what's causing me headaches. 
>
> As far as I can tell, it doesn't matter if T* and S* are convertible, 
> because when the compiler is looking for implicit conversions, it doesn't 
> care if the compiler could actually succeed, just that the types match up. 
>
> This means that any function that takes a Local<ANYTHING> will be a viable 
> implicit conversion overload match for any pointer type. Is this a 
> desirable behavior? 
>
>
> I believe this code shows a way to use SFINAE to stop this from happening: 
> http://ideone.com/cvZOHt
>
> basically:
>
> template <class S, typename = std::enable_if_t<std::is_convertible<T*,S*>
> ::value>>
> V8_INLINE Local(S* that)
>  : val_(that) {}
> V8_INLINE static Local<T> New(Isolate* isolate, T* that);
> T* val_;
>
> I believe std::is_convertible is the exact test as to whether : val_(that) 
> will create a compilation error, but I don't know for sure.
>
> If this doesn't change any intended behavior, I'd love to see it merged 
> in. 
> Thank you.
>
> --Zac
>

-- 
-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to