36 lines
673 B
Plaintext
36 lines
673 B
Plaintext
An implicit template specialization does not instantiate every member of the template. Where instantiation of a member would result in an ill-formed program it is not clear that the template should be used with the supplied template-arguments.
|
|
|
|
|
|
== Noncompliant Code Example
|
|
|
|
----
|
|
template <typename T>
|
|
class A
|
|
{
|
|
public:
|
|
void f1 ()
|
|
{
|
|
// ...
|
|
}
|
|
void f2 ()
|
|
{
|
|
T t;
|
|
t.x = 0; // Will only work for types that have a .x member
|
|
}
|
|
};
|
|
|
|
void b ()
|
|
{
|
|
A<int32_t> a; // A<int32_t>::f2 is not instantiated.
|
|
a.f1 ();
|
|
}
|
|
|
|
template class A<int32_t>; // Noncompliant, instantiation of f2 results in "ill-formed" program.
|
|
----
|
|
|
|
|
|
== See
|
|
|
|
* MISRA {cpp}:2008, 14-7-2
|
|
|