Skip to content

Implement constexpr generators or add the possibility for combining signature-based parametrised tests #3014

@definability

Description

@definability

Description

There are various reasons why a class or function may have multiple non-type template parameters, including (but not limited to) compile-time feature toggling, guaranteed compile-time branch elimination, and multidimensional spans and containers with compile-time extents.

There are already two features that are close to the request, but none seem to satisfy it exactly:

  1. Generators allow going through a Cartesian product of inputs.
  2. Type parametrised test cases have TEMPLATE_PRODUCT_TEST_CASE for combining types, and signature-based parametrised tests allow traversing compile-time constants.
  3. TEMPLATE_LIST_TEST_CASE allows using an std::tuple to represent types. Using an std::tuple of constexpr values for TEMPLATE_TEST_CASE_SIG would allow for at least manual compile-time generation of all required combinations.

Evident limitations of these approaches in the context of the request:

  1. Generators do not support constexpr values, so they cannot be used for non-type template parameters.
  2. A signature-based parameterised test argument list grows exponentially with any additional argument that needs to be combined with the others.
  3. The template list test case does not support values directly. However, there is std::integral_constant, which is sufficient for a lot of applications, but not all, because non-type template parameters are not limited to integral constants.

Additional context

Another user already made a similar request and was satisfied with the proposed solution, but I cannot reopen it and am unsure whether a comment in the closed issue would be lost.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions