How partial template specialization chosen?

做~自己de王妃 提交于 2019-12-10 08:15:41

问题


Please explain me the rules for template specialization selection. I have an example:

template<typename T1, typename T2 = int>
struct S : false_type{};

template<typename T>
struct S<T, float> : true_type{};

cout << boolalpha << S<float>::value;

Why the output is false? And in general, what happens with default template parameter typename T2 = int in specialized classes? Does it introduces some influence?


回答1:


Choosing a template specialization happens in five steps:

  1. Take the primary template declaration. (<T1, T2 = int> S)
  2. Fill in user-specified template arguments. (T1 <- float)
  3. Function templates only: Deduce additional template arguments.
  4. Use defaults for remaining template arguments. (T2 <- int)
  5. Use the partial ordering algorithm (C++14 14.5.6.2) to choose the best-matching specialization. (<float, int> does not match <T, float>, so ignore the specialization; only possibility left is primary template)


来源:https://stackoverflow.com/questions/35652212/how-partial-template-specialization-chosen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!