mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-02 11:54:27 +02:00
test: clang does not allow skipping template template parameters
This commit is contained in:
@@ -93,14 +93,14 @@ concept invalid_types = requires {
|
|||||||
};
|
};
|
||||||
static_assert(invalid_types<quantity_point>);
|
static_assert(invalid_types<quantity_point>);
|
||||||
|
|
||||||
template<template<auto, auto> typename QP>
|
template<template<auto, auto, typename> typename QP>
|
||||||
concept valid_types = requires {
|
concept valid_types = requires {
|
||||||
typename QP<si::metre, mean_sea_level>;
|
typename QP<si::metre, mean_sea_level, int>;
|
||||||
typename QP<isq::height[m], mean_sea_level>;
|
typename QP<isq::height[m], mean_sea_level, int>;
|
||||||
typename QP<special_height[m], mean_sea_level>;
|
typename QP<special_height[m], mean_sea_level, int>;
|
||||||
typename QP<si::metre, ground_level>;
|
typename QP<si::metre, ground_level, int>;
|
||||||
typename QP<isq::height[m], ground_level>;
|
typename QP<isq::height[m], ground_level, int>;
|
||||||
typename QP<special_height[m], ground_level>;
|
typename QP<special_height[m], ground_level, int>;
|
||||||
};
|
};
|
||||||
static_assert(valid_types<quantity_point>);
|
static_assert(valid_types<quantity_point>);
|
||||||
|
|
||||||
@@ -690,42 +690,42 @@ static_assert(invalid_compound_assignments<quantity_point>);
|
|||||||
// binary operators
|
// binary operators
|
||||||
////////////////////
|
////////////////////
|
||||||
|
|
||||||
template<template<auto, auto> typename QP, auto Origin, auto OtherOrigin>
|
template<template<auto, auto, typename> typename QP, auto Origin, auto OtherOrigin>
|
||||||
concept invalid_binary_operations = requires {
|
concept invalid_binary_operations = requires {
|
||||||
// can't add two quantity points
|
// can't add two quantity points
|
||||||
requires !requires { QP<isq::height[m], mean_sea_level>(1 * m) + QP<isq::height[m], mean_sea_level>(1 * m); };
|
requires !requires { QP<isq::height[m], mean_sea_level, int>(1 * m) + QP<isq::height[m], mean_sea_level, int>(1 * m); };
|
||||||
requires !requires { mean_sea_level + QP<isq::height[m], mean_sea_level>(1 * m); };
|
requires !requires { mean_sea_level + QP<isq::height[m], mean_sea_level, int>(1 * m); };
|
||||||
requires !requires { QP<isq::height[m], mean_sea_level>(1 * m) + mean_sea_level; };
|
requires !requires { QP<isq::height[m], mean_sea_level, int>(1 * m) + mean_sea_level; };
|
||||||
requires !requires { Origin + Origin; };
|
requires !requires { Origin + Origin; };
|
||||||
|
|
||||||
// can't add more generic quantity (violates point_origin quantity_spec)
|
// can't add more generic quantity (violates point_origin quantity_spec)
|
||||||
requires !requires { QP<si::metre, mean_sea_level>(1 * m) + isq::length(1 * m); };
|
requires !requires { QP<si::metre, mean_sea_level, int>(1 * m) + isq::length(1 * m); };
|
||||||
requires !requires { isq::length(1 * m) + QP<si::metre, mean_sea_level>(1 * m); };
|
requires !requires { isq::length(1 * m) + QP<si::metre, mean_sea_level, int>(1 * m); };
|
||||||
requires !requires { QP<isq::height[m], mean_sea_level>(1 * m) + isq::length(1 * m); };
|
requires !requires { QP<isq::height[m], mean_sea_level, int>(1 * m) + isq::length(1 * m); };
|
||||||
requires !requires { isq::length(1 * m) + QP<isq::height[m], mean_sea_level>(1 * m); };
|
requires !requires { isq::length(1 * m) + QP<isq::height[m], mean_sea_level, int>(1 * m); };
|
||||||
requires !requires { Origin + isq::length(1 * m); };
|
requires !requires { Origin + isq::length(1 * m); };
|
||||||
requires !requires { isq::length(1 * m) + Origin; };
|
requires !requires { isq::length(1 * m) + Origin; };
|
||||||
|
|
||||||
// can't subtract more generic quantity (violates point_origin quantity_spec)
|
// can't subtract more generic quantity (violates point_origin quantity_spec)
|
||||||
requires !requires { QP<si::metre, mean_sea_level>(1 * m) - isq::length(1 * m); };
|
requires !requires { QP<si::metre, mean_sea_level, int>(1 * m) - isq::length(1 * m); };
|
||||||
requires !requires { QP<isq::height[m], mean_sea_level>(1 * m) - isq::length(1 * m); };
|
requires !requires { QP<isq::height[m], mean_sea_level, int>(1 * m) - isq::length(1 * m); };
|
||||||
requires !requires { Origin - isq::length(1 * m); };
|
requires !requires { Origin - isq::length(1 * m); };
|
||||||
|
|
||||||
// quantity point can't be subtracted from a quantity
|
// quantity point can't be subtracted from a quantity
|
||||||
requires !requires { 1 * m - QP<si::metre, mean_sea_level>(1 * m); };
|
requires !requires { 1 * m - QP<si::metre, mean_sea_level, int>(1 * m); };
|
||||||
requires !requires { 1 * m - Origin; };
|
requires !requires { 1 * m - Origin; };
|
||||||
|
|
||||||
// no crossdimensional addition and subtraction
|
// no crossdimensional addition and subtraction
|
||||||
requires !requires { QP<si::metre, mean_sea_level>(1 * m) + 1 * s; };
|
requires !requires { QP<si::metre, mean_sea_level, int>(1 * m) + 1 * s; };
|
||||||
requires !requires { QP<si::metre, mean_sea_level>(1 * m) - 1 * s; };
|
requires !requires { QP<si::metre, mean_sea_level, int>(1 * m) - 1 * s; };
|
||||||
requires !requires { Origin + 1 * s; };
|
requires !requires { Origin + 1 * s; };
|
||||||
requires !requires { Origin - 1 * s; };
|
requires !requires { Origin - 1 * s; };
|
||||||
|
|
||||||
// can't subtract two quantity points of incompatible origins
|
// can't subtract two quantity points of incompatible origins
|
||||||
requires !requires { QP<isq::height[m], mean_sea_level>(1 * m) - QP<isq::height[m], other_absolute_level>(1 * m); };
|
requires !requires { QP<isq::height[m], mean_sea_level, int>(1 * m) - QP<isq::height[m], other_absolute_level, int>(1 * m); };
|
||||||
requires !requires { QP<isq::height[m], other_absolute_level>(1 * m) - QP<isq::height[m], mean_sea_level>(1 * m); };
|
requires !requires { QP<isq::height[m], other_absolute_level, int>(1 * m) - QP<isq::height[m], mean_sea_level, int>(1 * m); };
|
||||||
requires !requires { mean_sea_level - QP<isq::height[m], other_absolute_level>(1 * m); };
|
requires !requires { mean_sea_level - QP<isq::height[m], other_absolute_level, int>(1 * m); };
|
||||||
requires !requires { QP<isq::height[m], mean_sea_level>(1 * m) - other_absolute_level; };
|
requires !requires { QP<isq::height[m], mean_sea_level, int>(1 * m) - other_absolute_level; };
|
||||||
|
|
||||||
// cant'subtract two unrelated points
|
// cant'subtract two unrelated points
|
||||||
requires !requires { Origin - OtherOrigin; };
|
requires !requires { Origin - OtherOrigin; };
|
||||||
@@ -734,12 +734,12 @@ concept invalid_binary_operations = requires {
|
|||||||
requires !requires { Origin - Origin; };
|
requires !requires { Origin - Origin; };
|
||||||
|
|
||||||
// unit constants
|
// unit constants
|
||||||
requires !requires { QP<si::metre, mean_sea_level>(1) + m; };
|
requires !requires { QP<si::metre, mean_sea_level, int>(1) + m; };
|
||||||
requires !requires { QP<si::metre, mean_sea_level>(1) - m; };
|
requires !requires { QP<si::metre, mean_sea_level, int>(1) - m; };
|
||||||
requires !requires { Origin + m; };
|
requires !requires { Origin + m; };
|
||||||
requires !requires { Origin - m; };
|
requires !requires { Origin - m; };
|
||||||
requires !requires { m + QP<si::metre, mean_sea_level>(1); };
|
requires !requires { m + QP<si::metre, mean_sea_level, int>(1); };
|
||||||
requires !requires { m - QP<si::metre, mean_sea_level>(1); };
|
requires !requires { m - QP<si::metre, mean_sea_level, int>(1); };
|
||||||
requires !requires { m + Origin; };
|
requires !requires { m + Origin; };
|
||||||
requires !requires { m - Origin; };
|
requires !requires { m - Origin; };
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user