问题标签 [implicit-instantiation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
816 浏览

c++ - function template with unused template parameter

An instantiation of a<int> should be an error because int::type is illegal. But it seems that f1<int> can't cause the instantiation of a<T>, but f2<int> can. What's the reason?

0 投票
1 回答
173 浏览

c++ - 如果特化已经被隐式实例化,它是否会被隐式实例化?

标题中的问题已经很清楚了。更具体地说,请考虑以下示例:

此代码使用 GCC 和 Clang 编译

根据[temp.inst]/1

除非类模板特化已被显式实例化或显式特化,否则当在需要完全定义的对象类型的上下文中引用该特化或当类类型的完整性影响程序的语义时,类模板特化将被隐式实例化.

X<char>由于 被隐式实例化static_assert(!is_complete<X<char>>::type{}),这会生成不完整的类型。

然后,在 , 的定义之后X#1表明X<char>没有再次实例化(仍然不完整),而#2表明X<char>确实再次实例化(成为完整类型)。

如果特化已经被隐式实例化,它是否会被隐式实例化?#1为什么和之间有区别#2

欢迎对标准进行解释。

0 投票
0 回答
50 浏览

c++ - 模板类中的“使用”是否强制实例化?

这个问题是关于如何在运行之前使用全局变量初始化来实现一些副作用main()(例如,工厂类注册之前main())。当涉及模板时,这可能会很棘手。考虑以下代码:

如果我们删除using,行为会有所不同:

我的问题:using这里的技巧是编译器特定的东西,还是由 C++ 标准支持?我做了一些搜索,发现了一些关于标准 14.7.1 的相关信息,但仍然不确定规则,using因为它在 14.7.1 中没有提到(我的来源是这个,不确定它是否应该被视为基本事实)。此外,这using Dummy对我来说似乎有点 hacky。是否有任何其他解决方法可以使其更优雅?目标是解决class A自身内部的实例化,以便与副作用相关的代码段保持私有。

0 投票
1 回答
81 浏览

c++ - “用作非类型模板参数”是否使函数模板隐式实例化?

我想编写一个M接受不完整类型C作为模板参数的类模板。但我也希望C在最终定义时具有一些特征。

此代码是否有保证

  • 编译如果定义(标志),
  • 如果 !defined(FLAG) 编译失败?