- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
GCC 和 clang 不同意此代码。
#include <type_traits>
template <typename T, template <typename...> typename Tpl>
struct storage {
using type_t = T;
template <typename... Args>
using storage_tpl = Tpl<Args...>;
};
template <typename T, template <typename...> typename>
struct F{
constexpr static int x = 1;
};
template <typename T >
struct F<T, std::void_t>{
constexpr static int x = 2;
};
int f() {
using S = storage<int, std::void_t>;
static_assert(F<int, S::storage_tpl>().x == 2);
return F<int, S::storage_tpl>().x;
}
根据 clang S::storage_tpl
不是 std::void_t
;结果它选择了主模板 F 而不是部分特化,因此选择了断言。
乍一看,GCC 似乎是对的,因为它知道嵌套模板只是 std::void_t
的别名,但也许它太聪明了,标准要求 S::storage_tpl
和 std::void_t
必须是两个不同的模板。
谁是对的?
最佳答案
目前看来这是未指定的,h/t to T.C.看起来这被 CWG defect report 1286 涵盖了其中说:
Issue 1244 was resolved by changing the example in 17.5 [temp.type] paragraph 1 from
template<template<class> class TT> struct X { };
template<class> struct Y { };
template<class T> using Z = Y<T>;
X<Y> y;
X<Z> z;to
template<class T> struct X { };
template<class> struct Y { };
template<class T> using Z = Y<T>;
X<Y<int> > y;
X<Z<int> > z;In fact, the original intent was that the example should have been correct as written; however, the normative wording to make it so was missing. The current wording of 17.6.7 [temp.alias] deals only with the equivalence of a specialization of an alias template with the type-id after substitution. Wording needs to be added specifying under what circumstances an alias template itself is equivalent to a class template.
并提出以下决议:
Add the following as a new paragraph following 17.6.7 [temp.alias] paragraph 2:
When the type-id in the declaration of alias template (call it A) consists of a simple-template-id in which the template-argument-list consists of a list of identifiers naming each template-parameter of A exactly once in the same order in which they appear in A's template-parameter-list, the alias template is equivalent to the template named in the simple-template-id (call it T) if A and T have the same number of template-parameters. [Footnote: This rule is transitive: if an alias template A is equivalent to another alias template B that is equivalent to a class template C, then A is also equivalent to C, and A and B are also equivalent to each other. —end footnote] [Example:
template<typename T, U = T> struct A;
template<typename V, typename W>
using B = A<V, W>; // equivalent to A
template<typename V, typename W>
using C = A<V>; // not equivalent to A:
// not all parameters used
template<typename V>
using D = A<V>; // not equivalent to A:
// different number of parameters
template<typename V, typename W>
using E = A<W, V>; // not equivalent to A:
// template-arguments in wrong order
template<typename V, typename W = int>
using F = A<V, W>; // equivalent to A:
// default arguments not considered
template<typename V, typename W>
using G = A<V, W>; // equivalent to A and B
template<typename V, typename W>
using H = E<V, W>; // equivalent to E
template<typename V, typename W>
using I = A<V, typename W::type>; // not equivalent to A:
// argument not identifier—end example]
但此解决方案存在问题,缺陷报告仍然有效。
关于c++ - GCC/CLang 不同意模板模板参数的部分特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52725022/
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我编写了简单的 Java 应用程序供自己使用,它扫描 Excel 文档并从中提取一些事件。对于下一阶段,我希望它登录我的 Google 帐户并使用 Google Calendar API 创建这些事件
我有一个带有链接标记的复选框。单击链接标签时,我的模式打开。单击按钮然后选中复选框时我有模式 I agree with "Terms a
Consent SDK允许显示同意书,但目前只有英文版本(SDK 版本 1.0.3)。 SDK页面说: To update consent text of the Google-rendered co
您好,我需要一些关于如何应用丝潮cookie同意脚本的帮助http://silktide.com/cookieconsent/code 。 (由于欧盟 cookie 法等原因,我想对此进行广告)。现在
我收到了一封来自 Goolge 的关于在我的网站上实现 cookie 许可的电子邮件。我在 Play 商店中只发布了一个 Android 应用程序。它使用广告获利。有必要实现 cookie 同意消息吗
我正在尝试从 Youtube channel 检索 Youtube 视频列表,例如“https://www.youtube.com/user/YouTube/videos”,以获取第 n 个视频(感谢
我想抓取(使用 rvest )一个要求用户同意设置 cookie 的网站。如果我只是抓取页面,则 rvest 只会下载弹出窗口。这是代码: library(rvest) content % html_
我有一个 HTML 网站,我想向其中添加 Cookie-Consent。 类似于 Stackoverflow:Stackoverflow Screenshot 将会出现可能包含屏幕截图中所示链接的文本
我正在尝试将字符串与字符串向量匹配: a <- c('abcde', 'abcdf', 'abcdg') agrep('abcdh', a, max.distance=list(substitutio
我目前正在尝试集成 Google Consent SDK。onConsentInfoUpdated(consentStatus:ConsentStatus) 函数发生了一些我无法理解的事情 用户第一次
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭去年。 Im
我们在 Azure AD 中有一个使用 Microsoft Graph API 的应用。该应用程序使用 4 个基本权限成功运行:电子邮件、个人资料 User.Read User.ReadBasic.A
我们在 Azure AD 中有一个使用 Microsoft Graph API 的应用。该应用程序使用 4 个基本权限成功运行:电子邮件、个人资料 User.Read User.ReadBasic.A
此代码中未使用变量“status”。因此我无法检查用户的同意选择。 我必须将“状态数组”存储在默认值中。一旦当前状态在数组中可用,它将不会显示同意书。如果没有,那么我们将显示表单并将该状态添加到默认状
这是一个例子: 具体的实现可能有一些特定的行为,比如 ArrayList 的实现有 ensureCapacity(),它不适用于 LinkedList。 //programming to interf
我在一个网站上工作,我们目前有一个 cookie 横幅,它在启动时显示并有一个确定按钮。然而,我想改变这一点,让用户可以选择打开/关闭他们希望被跟踪的 cookie 类别。像这样: 我是 reactj
我正在使用 Mac OS X 10.9.5 和 git 版本 2.1.2。进入 推我收到: 同意 Xcode/iOS 许可证需要管理员权限,请通过 sudo 以 root 身份重新运行。 致命:无法从
搜索似乎只能找到使用 JavaScript 的解决方案。我想显示一个 Cookie 同意消息,即使访问者使用脚本拦截器也能看到它,所以我想知道这是否可以使用 CSS 和 HTML 来完成,而不需要任何
fun sample(list_of_str_lists, s) = case list_of_str_lists of [] => [] | x::[]
我是一名优秀的程序员,十分优秀!