
On Thu, Nov 11, 2004 at 04:37:53PM +0100, Christoph Ludwig wrote:
On Thu, Nov 11, 2004 at 10:07:43AM -0500, David Abrahams wrote:
Christoph Ludwig <cludwig@cdc.informatik.tu-darmstadt.de> writes: [...]
However, the regression tests report that gcc 3.4 passes the is_abstract test. The reason is that above error is triggered only if A<int> is not instantiated by the compiler; but is_abstract_test.cpp does not test class template specializations at all.
Why don't we just get is_abstract to cause the instantiation? It seems to me that you'd need to do that anyway in order to detect abstractness. As a matter of fact, I have some doubts about your diagnosis, since I can't imagine any way that is_abstract could work without doing the instantiation.
attached is: 1) a corrected version of is_abstract_template_test.cpp When I prepared the original version I did not realize that is_abstract<T&>::value is supposed to be false for any type T. 2) a patch to boost/type_traits/is_abstract.hpp that works around gcc bug #17232. I would not be surprised if my patch turns out to be overly complicated. I had assumed that any expression that involves sizeof(T) causes the instantiation of T if T is a template specialization. So I tried, e.g., to add the condition sizeof(T) > 0 to the parameter list of ice_and in is_abstract_imp. For some reason, though, whatever I tried showed no effect. (Perhaps the compiler realized that the conditions I added were true for any type T and eliminated the evaluation of sizeof(T)?) I finally settled for attached patch that adds a further struct in which SFINAE is used again. With this patch gcc 3.4.2 passes both is_abstract_test.cpp as well as the attached is_abstract_template_test.cpp. I still would like to see something like is_abstract_template_test.cpp added to the type_traits tests. It is easy to introduce subtle bugs both in the compiler when implementing SFINAE and template instantiation as well as in the code relying on SFINAE. Regards Christoph -- http://www.informatik.tu-darmstadt.de/TI/Mitarbeiter/cludwig.html LiDIA: http://www.informatik.tu-darmstadt.de/TI/LiDIA/Welcome.html