Skip to content

Clang 19 -Wc++20-extensions warning #2910

@ChrisThrasher

Description

@ChrisThrasher

Describe the bug
Clang reports a -Wc++20-extensions warning when expanding the TEMPLATE_TEST_CASE macro with the following message

/Users/thrasher/Projects/Catch2/tests/SelfTest/IntrospectiveTests/FloatingPoint.tests.cpp:27:1: error: passing no argument for the '...' parameter of a variadic macro is a C++20 extension [-Werror,-Wc++20-extensions]
   27 | TEMPLATE_TEST_CASE("type-shared ulpDistance tests", "[floating-point][ulp][approvals]", float, double) {
      | ^
/Users/thrasher/Projects/Catch2/src/catch2/../catch2/catch_template_test_macros.hpp:76:39: note: expanded from macro 'TEMPLATE_TEST_CASE'
   76 |     #define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
      |                                       ^
/Users/thrasher/Projects/Catch2/src/catch2/../catch2/internal/catch_template_test_registry.hpp:104:9: note: expanded from macro 'INTERNAL_CATCH_TEMPLATE_TEST_CASE'
  104 |         INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ), INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ), Name, Tags, typename TestType, __VA_ARGS__ )
      |         ^
/Users/thrasher/Projects/Catch2/src/catch2/../catch2/internal/catch_template_test_registry.hpp:82:13: note: expanded from macro 'INTERNAL_CATCH_TEMPLATE_TEST_CASE_2'
   82 |             INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
      |             ^
/Users/thrasher/Projects/Catch2/src/catch2/../catch2/internal/catch_preprocessor.hpp:217:465: note: expanded from macro 'INTERNAL_CATCH_NTTP_GEN'
  217 | #define INTERNAL_CATCH_NTTP_GEN(...) INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__),INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_0)
      |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ^
/Users/thrasher/Projects/Catch2/src/catch2/../catch2/internal/catch_preprocessor.hpp:100:9: note: macro 'INTERNAL_CATCH_VA_NARGS_IMPL' defined here
  100 | #define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
      |         ^

Reproduction steps
I'm using the all-tests preset with Clang 19 as provided by Homebrew. I also encounter this issue when consuming Catch2 via FetchContent for use in various other projects.

Platform information:

  • OS: macOS 15
  • Compiler+version: Clang 19.1.0
  • Catch version: v3.7.1 fa43b77429ba76c462b1898d6cd2f2d7a9416b14

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions