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.
