I think I simply had the parameters to is_convertible backwards in my first
post:
template <class S, typename = std::enable_if_t<std::is_convertible<S*,T*>::
value>>
V8_INLINE Local(S* that)
: val_(that) {}
V8_INLINE static Local<T> New(Isolate* isolate, T* that);
T* val_;
This link http://ideone.com/RVL4rD shows overloaded functions being
selected appropriately as well as pointer assignment working between
compatible types.
On Wednesday, January 27, 2016 at 5:03:49 PM UTC-8, [email protected] wrote:
>
> 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.