当我在玩的时候,我偶然发现了下面的代码片段,令人惊讶的是,它与我的期望不符。
#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)