根据 [temp.spec] p4 ,特化是实例化或显式特化的类/函数/[...]。 [temp.expl.spec] p19指出一些显式特化是模板,这让我相信显式特化是特化(在“从模板生成的实体”的意义上),而不是模板(有时)。
我的问题是,显式特化是实际的具体实体(类/函数/[...]),还是模板。如果不是,它们到底是什么?它们不是模板或特化(遵循 [temp.spec] p4 提供的定义)
最佳答案
你的问题假定了一个不需要存在的二元状态,即一个明确的特化要么是一个模板,要么是一个“具体实体”。
显式特化可能是也可能不是模板。非模板显式特化是特化。正如您引用的文字中所述:
A specialization is a class, variable, function, or class member that is either instantiated or explicitly specialized.
因此,显式特化的行为类似于特化。模板实例化(隐式或显式)创建特化,除非参数匹配显式特化。所以相反,这就是被使用的东西。但无论是通过实例化还是通过显式特化生成,特化都被视为特化。
因此,例如,处理同一函数模板的不同显式特化,不是通过重载决议规则,而是通过模板参数推导。这与该模板的任何其他特化情况没有什么不同。
关于c++ - 是明确的特化模板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56352660/