Badge: Access to underlying type

Problem:
- Access to the underlying type is not provided. This limits
  metaprogramming and usage in function templates.

Solution:
- Provide public access to the underlying type.
- Add test to ensure the underlying type is accessible.
This commit is contained in:
Lenny Maiorani 2021-01-14 11:12:44 -07:00 committed by Andreas Kling
parent 53afdc0106
commit 6d6b3f9523
3 changed files with 43 additions and 2 deletions

View file

@ -30,6 +30,10 @@ namespace AK {
template<typename T>
class Badge {
public:
using Type = T;
private:
friend T;
constexpr Badge() = default;

View file

@ -3,6 +3,7 @@ set(AK_TEST_SOURCES
TestAnyOf.cpp
TestArray.cpp
TestAtomic.cpp
TestBadge.cpp
TestBase64.cpp
TestBinarySearch.cpp
TestBitmap.cpp
@ -18,8 +19,8 @@ set(AK_TEST_SOURCES
TestFormat.cpp
TestHashFunctions.cpp
TestHashMap.cpp
TestIndexSequence.cpp
TestIPv4Address.cpp
TestIndexSequence.cpp
TestJSON.cpp
TestLexicalPath.cpp
TestMACAddress.cpp
@ -39,8 +40,8 @@ set(AK_TEST_SOURCES
TestStringUtils.cpp
TestStringView.cpp
TestTrie.cpp
TestTypedTransfer.cpp
TestTypeTraits.cpp
TestTypedTransfer.cpp
TestURL.cpp
TestUtf8.cpp
TestVector.cpp

36
AK/Tests/TestBadge.cpp Normal file
View file

@ -0,0 +1,36 @@
/*
* Copyright (c) 2021, the SerenityOS developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <AK/TestSuite.h>
#include <AK/Badge.h>
TEST_CASE(should_provide_underlying_type)
{
static_assert(AK::IsSame<int, Badge<int>::Type>::value);
}
TEST_MAIN(Badge)