[LLVMbugs] [Bug 13729] New: Dependent return type with constant member gives "out-of-line definition differs from the declaration"
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Thu Aug 30 02:50:51 PDT 2012
http://llvm.org/bugs/show_bug.cgi?id=13729
Bug #: 13729
Summary: Dependent return type with constant member gives
"out-of-line definition differs from the declaration"
Product: clang
Version: 3.1
Platform: PC
OS/Version: All
Status: NEW
Severity: normal
Priority: P
Component: C++
AssignedTo: unassignedclangbugs at nondot.org
ReportedBy: bruno-llvm at defraine.net
CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
Classification: Unclassified
template<int n> struct foo { };
template<typename T>
struct curr {
static const int n = 1;
foo<n> f();
};
template<typename T>
foo<curr<T>::n> curr<T>::f() {
return foo<1>();
}
When trying to compile this, I get:
out2.cpp:10:26: error: out-of-line definition of 'curr::f' differs from the
declaration in the return type
foo<curr<T>::n> curr<T>::f() {
^
out2.cpp:6:9: note: previous declaration is here
foo<n> f();
^
1 error generated.
The annoying bit is that you cannot easily work around this. Trying to change
the declaration of f() to:
foo<curr<T>::n> f();
does not help. The error remains, although the return type is *exactly* the
same.
This may be related to bug #11381, but using a type instead of constant does
not give this problem. For example:
template<typename T> struct foo { };
template<typename T>
struct curr {
typedef int type;
foo<type> f();
};
template<typename T>
foo<typename curr<T>::type> curr<T>::f() {
return foo<int>();
}
This compiles without problems.
All of this is using:
Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.1.0
Thread model: posix
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list