Utility functions taken from Jamoma TTBase.h 
|  | 
| template<class T , std::size_t N> | 
| using | is_braces_constructible_n = decltype(test_is_braces_constructible_n< T >(std::make_index_sequence< N >{})) | 
|  | 
| template<class T > | 
| using | to_tuple_size = std::integral_constant< std::size_t, to_tuple_size_f< T >()> | 
|  | 
| using | vec_behavior = ossia::static_vector< curve< double, float > *, 4 > | 
|  | 
| template<typename T > | 
| using | strong_value_impl_t = decltype(T::dataspace_value) | 
|  | 
| template<typename T , typename U > | 
| using | enable_if_both_iterable = std::enable_if_t< both_iterable< T, U > > | 
|  | 
| template<typename T , typename U > | 
| using | enable_if_first_iterable = std::enable_if_t< first_iterable< T, U > > | 
|  | 
| template<typename T , typename U > | 
| using | enable_if_second_iterable = std::enable_if_t< second_iterable< T, U > > | 
|  | 
| template<typename T , typename U > | 
| using | enable_if_neither_iterable = std::enable_if_t< neither_iterable< T, U > > | 
|  | 
| using | unit_map = string_view_map< ossia::unit_t > | 
|  | 
| template<typename Unit > | 
| using | enable_if_multidimensional = std::enable_if_t< Unit::is_multidimensional::value > | 
|  | 
| using | unit_pretty_text_map = ossia::hash_map< ossia::unit_t, std::string > | 
|  | 
| using | float_minmax = std::pair< std::optional< float >, std::optional< float > > | 
|  | 
|  | 
| void | union_successor_sets (const std::vector< std::size_t > &s1, const std::vector< std::size_t > &s2, std::vector< std::size_t > &s3) | 
|  | 
| template<typename TheContainer > | 
| subscript_t< TheContainer > | subscript (TheContainer &c) | 
|  | 
| template<class T , std::size_t N, std::size_t... I> | 
| constexpr std::array< std::remove_cv_t< T >, N > | to_array_impl (T(&a)[N], std::index_sequence< I... >) noexcept | 
|  | 
| template<class T , std::size_t... I> | 
| decltype(void(T{(I, std::declval< any_type >())...}), std::true_type{}) | test_is_braces_constructible_n (std::index_sequence< I... >) | 
|  | 
| template<class , class... > | 
| std::false_type | test_is_braces_constructible_n (...) | 
|  | 
| template<class T , std::size_t L = 0u, std::size_t R = sizeof(T) + 1u> | 
| constexpr std::size_t | to_tuple_size_f () | 
|  | 
| template<class T > | 
| auto | to_tuple_impl (T &&, std::integral_constant< std::size_t, 0 >) noexcept | 
|  | 
| template<class T , class  = struct current_value, std::size_t  = TO_TUPLE_MAX, class  = struct required_value, std::size_t N> | 
| auto | to_tuple_impl (T &&, std::integral_constant< std::size_t, N >) noexcept | 
|  | 
| template<int N> | 
| ossia::value | make_filled_vec (ossia::curve_abstract *base_curve, ossia::curve_segment_type t, double position) | 
|  | 
| template<typename Dataspace , typename Unit > | 
| std::string | make_pretty_unit_text () | 
|  | 
| template<typename InsertFun > | 
| void | list_units (InsertFun fun) | 
|  | 
| template<typename T > | 
| T | LinearGainToDecibels (const T value) | 
|  | 
| template<typename T > | 
| T | LinearGainToDecibelsClipped (const T value) | 
|  | 
| template<typename T > | 
| T | DecibelsToLinearGain (const T value) | 
|  | 
| template<typename T > | 
| T | DecibelsToLinearGainClipped (const T value) | 
|  | 
| template<typename T > | 
| T | MidiToLinearGain (const T value) | 
|  | 
| template<typename T > | 
| T | DecibelsToMidi (const T value) | 
|  | 
| template<typename T > | 
| T | LinearGainToMidi (const T value) | 
|  |