diff --git a/include/etl/experimental/mem_type.h b/include/etl/experimental/mem_type.h index 60cc43f1..886d5b39 100644 --- a/include/etl/experimental/mem_type.h +++ b/include/etl/experimental/mem_type.h @@ -36,6 +36,7 @@ SOFTWARE. #include "../platform.h" #include "../memory.h" #include "../static_assert.h" +#include "../largest.h" namespace etl { @@ -222,6 +223,17 @@ namespace etl char* pbuffer; }; + +#if ETL_CPP11_SUPPORTED + //***************************************************************************** + /// mem_type_var + //***************************************************************************** + template + class mem_type_var : public etl::mem_type::size, + etl::largest::alignment> + { + }; +#endif } #endif diff --git a/test/test_mem_type.cpp b/test/test_mem_type.cpp index b0d1db30..318a8822 100644 --- a/test/test_mem_type.cpp +++ b/test/test_mem_type.cpp @@ -45,15 +45,19 @@ namespace std::array a; }; + constexpr size_t Size = etl::largest::size; + constexpr size_t Alignment = etl::largest::alignment; + // Test variant types. - using MemType = etl::mem_type::size, - etl::largest::alignment>; + using MemType = etl::mem_type; + using MemTypeVar = etl::mem_type_var; SUITE(test_mem_type) { TEST(test_alignment) { - MemType memType; + MemType memType; + MemTypeVar memTypeVar; CHECK(alignof(char) <= MemType::Alignment); CHECK(alignof(short) <= MemType::Alignment); @@ -66,11 +70,24 @@ namespace CHECK(alignof(char) <= memType.alignment()); CHECK(alignof(short) <= memType.alignment()); CHECK(alignof(Data) <= memType.alignment()); + + CHECK(alignof(char) <= MemTypeVar::Alignment); + CHECK(alignof(short) <= MemTypeVar::Alignment); + CHECK(alignof(Data) <= MemTypeVar::Alignment); + + CHECK(alignof(char) <= memTypeVar.Alignment); + CHECK(alignof(short) <= memTypeVar.Alignment); + CHECK(alignof(Data) <= memTypeVar.Alignment); + + CHECK(alignof(char) <= memTypeVar.alignment()); + CHECK(alignof(short) <= memTypeVar.alignment()); + CHECK(alignof(Data) <= memTypeVar.alignment()); } TEST(test_size) { - MemType memType; + MemTypeVar memType; + MemTypeVar memTypeVar; CHECK(sizeof(char) <= MemType::Size); CHECK(sizeof(short) <= MemType::Size); @@ -83,6 +100,18 @@ namespace CHECK(sizeof(char) <= memType.size()); CHECK(sizeof(short) <= memType.size()); CHECK(sizeof(Data) <= memType.size()); + + CHECK(sizeof(char) <= MemTypeVar::Size); + CHECK(sizeof(short) <= MemTypeVar::Size); + CHECK(sizeof(Data) <= MemTypeVar::Size); + + CHECK(sizeof(char) <= memTypeVar.Size); + CHECK(sizeof(short) <= memTypeVar.Size); + CHECK(sizeof(Data) <= memTypeVar.Size); + + CHECK(sizeof(char) <= memTypeVar.size()); + CHECK(sizeof(short) <= memTypeVar.size()); + CHECK(sizeof(Data) <= memTypeVar.size()); } }; }