小编DNK*_*Kpp的帖子

别名模板是否被视为与原始模板相同的模板模板参数?

当我在玩的时候,我偶然发现了下面的代码片段,令人惊讶的是,它与我的期望不符。

#include <tuple>
#include <type_traits>

template <class... Ts>
using myTuple = std::tuple<Ts...>;

template <template <class...> class Lhs, template <class...> class Rhs>
struct is_same
    : public std::false_type
{};

template <template <class...> class T>
struct is_same<T, T>
    : public std::true_type
{};

int main() {
    static_assert(is_same<myTuple, std::tuple>::value, "not same");
}
Run Code Online (Sandbox Code Playgroud)

我把它放在godbolt上并尝试用 3 个不同的编译器(clang、msvc 和 gcc)编译它,并收到了混合的结果。

铛:

<source>:18:5: error: static_assert failed due to requirement 'is_same<myTuple, std::tuple>::value' "not same"
static_assert(is_same<myTuple, std::tuple>::value, "not same");
^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

微软VC:

<source>(18): error C2338: static_assert failed: 'not same' …
Run Code Online (Sandbox Code Playgroud)

c++ template-specialization template-templates

3
推荐指数
1
解决办法
139
查看次数