[Bug c++/23542] New: Warn template instantiation calling static functions
veksler at il dot ibm dot com
gcc-bugzilla@gcc.gnu.org
Wed Aug 24 07:11:00 GMT 2005
As described in the thread "Should template dependent lookup find static
functions?" :
http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/d6d9a5f3e12ccf80/7038bb2e4c75e190#7038bb2e4c75e190
I'll give the example again:
---- begin example ----
class inner_t { };
template <class T>
struct outer_t { T m_elem; };
template <class T>
void examine(const outer_t<T> & data)
{
// Finding the static (or anon-namespace) function may lead
// to undefined behavior (when it happens in multiple translation
// units).
access(data.m_elem);
}
// NOTE: this is static! GCC finds it as a dependent name from examine.
// This *may* lead to undefined behavior.
static void access(const inner_t & ) {}
int main()
{
outer_t<inner_t> instance;
examine(instance);
}
--- end example ---
gcc-3.4.3 and gcc-4.0.0 accept this without a warning.
(-W -Wall -O{0,1,2} give no warning).
The problem is that if both static function and the template
function are in a header file, then the behavior is undefined,
yet the compiler has to accept it (it may issue a warning).
Of course, GCC may implement an extension and document it,
such that it is no longer undefined for GCC (e.g. make it
defined as long as having the same static function).
The same problem happens when `static' is replaced
with `namespace {'.
--
Summary: Warn template instantiation calling static functions
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: veksler at il dot ibm dot com
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23542
More information about the Gcc-bugs
mailing list