FIX: Error Using Inline Assembly in a Template ClassLast reviewed: September 18, 1997Article ID: Q136594 |
2.00 2.10 2.20
WINDOWS NT
kbtool kbbuglist kbfixlist
The information in this article applies to:
SYMPTOMSIf inline assembly is used in an inline member function defined within a templated class, the compiler generates these errors:
If the assembly instruction is of the form _asm { int 3 }: error C2304: '<template class instance> }' : unexpected tokens following type fatal error C1004: unexpected end of file found. If the assembly instruction is of the form _asm int 3: fatal error C1075: end of file found before the left <Unknown> at <filename line number> was matched.The type of error depends on whether the assembly instruction is enclosed in braces or not. NOTE: The same error occurs for macros like ASSERT and VERIFY, which expand to an _asm {int 3} instruction.
RESOLUTIONDefine the member function outside the templated class using the "inline" keyword.
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Microsoft Visual C++, 32-bit Edition, version 4.0.
MORE INFORMATION
Sample Code to Reproduce Problem
/* Compile options needed: /Ob1 or /Ob2 for the workaround function /* to be inline */template <class type> class myclass { public: void good_fun(); void bad_fun() { _asm {int 3} // This generates a compiler error. } };template <class type> inline void myclass<type>::good_fun() { _asm {int 3} // This doesn't generate an error. } void main(void) { myclass<int> foo;} In this code, the good_fun() compiles without any error.
|
Additional reference words: 2.00 2.10 2.20 9.00 9.10
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |