Home > Backend Development > C++ > Why Does Using `std::enable_if_t` With Default Values Result in a Redefinition Error?

Why Does Using `std::enable_if_t` With Default Values Result in a Redefinition Error?

DDD
Release: 2024-11-12 11:24:02
Original
305 people have browsed it

Why Does Using `std::enable_if_t` With Default Values Result in a Redefinition Error?

Redefinition Issue with enable_if_t Template Arguments

In the provided code, the attempt to convert the std::enable_if type constraint using the new syntax (typename = std::enable_if_t...) results in a redefinition error. This is because the two template functions:

template<typename T, typename = std::enable_if_t<std::is_same<int, T>::value>>>
void g() { }
Copy after login

and

template<typename T, typename = std::enable_if_t<std::is_same<double, T>::value>>>
void g() { }
Copy after login

are both of type templatevoid(). The fact that the second type argument has different default values is irrelevant, as the compiler considers the two templates to be identical.

To address this issue, it is necessary to remove the default values from the enable_if_t constraint. This results in the following code:

template<typename T, std::enable_if_t<std::is_same<int, T>::value, int>*>
void g() { }

template<typename T, std::enable_if_t<std::is_same<double, T>::value, int>*>
void g() { }
Copy after login

In this case, the second type argument is now a pointer, whose type is dependent on the first. The compiler can substitute in the type T to determine if there is a conflict between the two templates, and it will resolve that there is none.

The above is the detailed content of Why Does Using `std::enable_if_t` With Default Values Result in a Redefinition Error?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template