C++自动模板功能超负荷歧义

问题描述 投票:0回答:1
#include <iostream>
#include <concepts>


struct Sound { int amplitude; };
struct Light { int brightness; };

template <typename T>
concept Alert = std::derived_from<T, Sound> && std::derived_from<T, Light>;


struct FirstSound : Sound{};
struct FirstLight : Light{};
struct FirstSoundLight : FirstSound, FirstLight{};

struct LastSound : Sound{};
struct LastLight : Light{};
struct LastSoundLight : LastSound, LastLight{};

template <typename T>
concept FirstAlert = std::derived_from<T, FirstSound> && std::derived_from<T, FirstLight>;

template <typename T>
concept LastAlert = std::derived_from<T, LastSound> && std::derived_from<T, LastLight>;


void warn(FirstAlert auto const& a, LastAlert auto const& b)
{ std::cout << "Special warning"; }

void warn(Alert auto const& a, LastAlert auto const& b) = delete;
//{ std::cout << "Deleted warning"; }

void warn(Alert auto const& a, Alert auto const& b)
{ std::cout << "General warning"; }

int main() 
{
    warn(FirstSoundLight{}, LastSoundLight{});
    return 0;
}

上面的代码是我问题的简化版本。如何使编译器在不明确施放参数的情况下以给定的顺序进行无歧义的函数?

function c++20 auto ambiguity
1个回答
0
投票

您需要包含在其他两个概念中:

concept Alert

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.