Date: Thu, 30 Mar 2017 23:14:06 -0300
LWG2911 gave us the new `is_aggregate` trait, but no feature-test macro.
I would like to suggest `__cpp_lib_is_aggregate`. What follows is a
motivational use case, courtesy of Jonathan Wakely:
#include <vector>
template<typename T, typename... Args>
T make(Args&&... args)
{
#if __cpp_lib_is_aggregate
if constexpr (std::is_aggregate_v<T>)
return { std::forward<Args>(args)... };
else
#endif
return T(std::forward<Args>(args)...);
}
struct Agg { int i; };
int main()
{
auto v = make<std::vector<int>>(1, 2);
#if __cpp_lib_is_aggregate
// make<> only supports aggregates if std::is_aggregate is
available
auto a = make<Agg>(1);
#endif
}
Regards,
I would like to suggest `__cpp_lib_is_aggregate`. What follows is a
motivational use case, courtesy of Jonathan Wakely:
#include <vector>
template<typename T, typename... Args>
T make(Args&&... args)
{
#if __cpp_lib_is_aggregate
if constexpr (std::is_aggregate_v<T>)
return { std::forward<Args>(args)... };
else
#endif
return T(std::forward<Args>(args)...);
}
struct Agg { int i; };
int main()
{
auto v = make<std::vector<int>>(1, 2);
#if __cpp_lib_is_aggregate
// make<> only supports aggregates if std::is_aggregate is
available
auto a = make<Agg>(1);
#endif
}
Regards,
-- Agustín K-ballo Bergé http://talesofcpp.fusionfenix.com
Received on 2017-03-31 04:14:23