Request Short Link
C++ 98
C++ 11
C++ 14
C++ 17
C++ 20
C++ 23
C++ 2c
for-loops as while-loops
array subscription
Show all implicit casts
Show all template parameters of a CallExpr
Use libc++
Transform std::initializer_list
Show noexcept internals
Show padding information
Show coroutine transformation
Show C++ to C transformation
Show object lifetime
Default
15
18
20
22
26
More
GitHub
Patreon
GitHub Sponsor
Issues
About
Policies
Examples
C++ Insights @ YouTube
Settings
Version
New C++ Insights Episode
×
Made by
Andreas Fertig
Source:
#include <array> #include <cstddef> #include <type_traits> #include <utility> template <class T, std::size_t... Is, class... Rest> constexpr auto make_md_array_impl(const T& val, std::index_sequence<Is...>, Rest... rs) { if constexpr (sizeof...(Rest) != 0) { // recurse sizeof...(Is) times to create inner arrays return std::array{((void)Is, make_md_array_impl(val, rs...))...}; } else { // inner most array, initialize it with sizeof...(Is) val's: return std::array{((void)Is, val)...}; } } template <std::size_t... Ns, class T> constexpr auto make_md_array(const T& val) { return make_md_array_impl(val, std::make_index_sequence<Ns>{}...); } int main() { const std::array<std::array<std::array<double, 1000>, 3>, 4> ref{}; constexpr auto arr = make_md_array<4, 3, 1000>(-1.); // double[4][3][1000] static_assert(std::is_same_v<decltype(ref), decltype(arr)>); }
Insight:
Console: