RFR: 8251274: Provide utility types for function SFINAE using extra template parameters
Erik Österlund
erik.osterlund at oracle.com
Mon Aug 31 09:38:02 UTC 2020
Hi Kim,
Looks good.
Thanks,
/Erik
On 2020-08-31 11:18, Kim Barrett wrote:
>> On Aug 31, 2020, at 4:55 AM, Erik Österlund <erik.osterlund at oracle.com> wrote:
>> On 2020-08-28 21:46, Kim Barrett wrote:
>>>> So this value SFINAE only macro for doing SFINAE using a template parameter seems like
>>>> something that we can actually do without relying on any compiler bugs being fixed or
>>>> refactoring the world in HotSpot (yet). And I think it is more readable than the return
>>>> type SFINAE we have today (that requires extra lines for the return type, and you have
>>>> to scratch your head to figure out what the actual return type is). I would say that
>>>> such a value SFINAE macro is worthwhile doing, IMO.
>>> This is the main point of all this, of course. As you know, I really dislike
>>> the C++98 function template SFINAE syntax. So much so that I'd rather
>>> delegate to class templates, as was done with the Atomic::*Impl classes. The
>>> new style enabled by this C++11 feature changes everything. So I'm highly
>>> motivated to reach some consensus on how we're going to use this new
>>> feature.
>> Agreed.
>>
>>> I think that macro is okay. I would be even happier with it if we had
>>> variable templates for the type traits, a la C++17, so
>>>
>>> std::is_integral<T>::value => std::is_integral_v<T>
>>>
>>> We could add a suite of IsIntegralV &etc variable templates. Alternatively,
>>> I wonder how much trouble we might be taking on if we conditionally defined
>>> them with something like
>>>
>>> #if __cplusplus == 201402L
>>> namespace std {
>>> template<typename T> constexpr bool is_integral_v = std::is_integral<T>::value;
>>> ...
>>> }
>>> #endif // __cplusplus
>>>
>>> […]
>> That seems like a good idea. And yeah I really don't think that difference will matter at all.
>>
>>>> I tried it in my usecase I mentioned, and I think it looks pretty good. Feels like
>>>> having a nice comfortable sofa in the sewers. I think I want this nice comfortable sofa.
>>>>
>>>> What do you think?
>>> I had code that used the combined type/value macro and was ready to move forward
>>> with that until I tried testing with Visual Studio (sigh!). I’d prefer being able to use the
>>> variable template forms of various traits, but could live without if need be.
>>>
>>> If we adopt this macro, I'm inclined to just drop the proposed
>>> EnableIfAnd<...> and EnableIfOr<…>. […]
>> That makes sense. Using the macro and dropping the EnableIf{And | Or} sounds good to me.
> OK. Then here’s a new webrev. (The gtest file has no changes now, but still shows up in the
> webrev because of the change then revert in the patch series.) Just a full, since there seems
> little point in an incremental.
>
> https://cr.openjdk.java.net/~kbarrett/8251274/open.01/
>
>
>
More information about the hotspot-dev
mailing list