Skip to content

Commit

Permalink
Badge: Access to underlying type
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
ldm5180 authored and awesomekling committed Jan 15, 2021
1 parent 53afdc0 commit 6d6b3f9
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 2 deletions.
4 changes: 4 additions & 0 deletions AK/Badge.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ namespace AK {

template<typename T>
class Badge {
public:
using Type = T;

private:
friend T;
constexpr Badge() = default;

Expand Down
5 changes: 3 additions & 2 deletions AK/Tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ set(AK_TEST_SOURCES
TestAnyOf.cpp
TestArray.cpp
TestAtomic.cpp
TestBadge.cpp
TestBase64.cpp
TestBinarySearch.cpp
TestBitmap.cpp
Expand All @@ -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
Expand All @@ -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
Expand Down
36 changes: 36 additions & 0 deletions AK/Tests/TestBadge.cpp
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 6d6b3f9

Please sign in to comment.