On 02/06/2013 07:51 AM, Nick Lewycky wrote:
On 5 February 2013 20:31, Nick Lewycky <[email protected] <mailto:[email protected]>> wrote:Hi Enea! This introduced a regression. I've attached an updated testcase to go into clang, but the affected code looks like: template<typename T> class B; template <typename T> class A { template<typename S> friend class B<S>::ty; }; template <typename T> class B { struct ty {}; }; void test() { (void)sizeof(A<int>); } you didn't update CheckFriendTypeDecl or any of its callers. CheckFriendTypeDecl does this: // C++11 [class.friend]p3: // A friend declaration that does not declare a function shall have one // of the following forms: // friend elaborated-type-specifier ; // friend simple-type-specifier ; // friend typename-specifier ; if (getLangOpts().CPlusPlus11 && LocStart != FriendLoc) Diag(FriendLoc, diag::err_friend_not_first_in_declaration) << T; what happens is that LocStart now starts at the "template" keyword while the FriendLoc is the "friend" keyword. I'm going to try fixing it tonight, but if I can't then I might have to revert it temporarily and please resubmit when you have this bug fixed. I committed the fix in r174486. Please take a look, and let me know if you have any review comments! Nick
Seems fine. Thanks for fixing it, Enea. _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
