Viewing file: concepts-alias5.C (1.31 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR c++/93377 // { dg-do compile { target c++20 } }
struct empty {};
template <typename c> c value;
template <typename c> auto func(value<c>);
template <typename, typename...> struct alignment_algorithm;
template <typename... args_t> struct select { template <typename algorithm_t, typename... _args_t> decltype(algorithm_t()(func<_args_t>...)) choose();
template <typename...> static empty choose();
using type = decltype(choose<alignment_algorithm<int>, args_t...>()); };
template <typename, typename... args_t> struct select_algorithm : select<args_t...> {};
template <typename, typename = void> struct maybe_value { int value; };
template <typename cn> struct maybe_value<cn, typename cn::sfinae>;
struct function { template <typename algorithm_t, typename = decltype( maybe_value<select_algorithm<algorithm_t, int>>::value)> function(algorithm_t); };
template <typename> struct alignment_configuration_traits { static constexpr bool is_vectorised = 0; };
template <typename config_t, typename...> struct alignment_algorithm { using traits_t = alignment_configuration_traits<config_t>; template <typename indexed_sequence_pairs_t> void operator()(indexed_sequence_pairs_t) requires traits_t::is_vectorised; };
int main() { function{alignment_algorithm<int>{}}; }
|