[cfe-commits] r124792 - /cfe/trunk/www/compatibility.html

John McCall rjmccall at apple.com
Thu Feb 3 03:29:18 PST 2011


Author: rjmccall
Date: Thu Feb  3 05:29:18 2011
New Revision: 124792

URL: http://llvm.org/viewvc/llvm-project?rev=124792&view=rev
Log:
More tweaks to the compatibility page.


Modified:
    cfe/trunk/www/compatibility.html

Modified: cfe/trunk/www/compatibility.html
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/www/compatibility.html?rev=124792&r1=124791&r2=124792&view=diff
==============================================================================
--- cfe/trunk/www/compatibility.html (original)
+++ cfe/trunk/www/compatibility.html Thu Feb  3 05:29:18 2011
@@ -65,7 +65,7 @@
       <li><a href="#implicit-downcasts">Implicit downcasts</a></li>
     </ul>
     <ul>
-      <li><a href="#Use of class as method name">Use of class as method name</a></li>
+      <li><a href="#class-as-property-name">Using <code>class</code> as a property name</a></li>
     </ul>
   </li>
 </ul>
@@ -418,8 +418,8 @@
 <ul>  
   <li>The element type of a variable length array must be a POD
   ("plain old data") type, which means that it cannot have any
-  user-declared constructors or destructors, base classes, or any
-  members if non-POD type. All C types are POD types.</li>
+  user-declared constructors or destructors, any base classes, or any
+  members of non-POD type. All C types are POD types.</li>
 
   <li>Variable length arrays cannot be used as the type of a non-type
 template parameter.</li> </ul>
@@ -428,12 +428,9 @@
 
 <ol>
 <li>replace the variable length array with a fixed-size array if you can
-    determine a
-    reasonable upper bound at compile time; sometimes this is as
+    determine a reasonable upper bound at compile time; sometimes this is as
     simple as changing <tt>int size = ...;</tt> to <tt>const int size
-    = ...;</tt> (if the definition of <tt>size</tt> is a compile-time
-    integral constant);</li>
-<li>use <tt>std::string</tt> instead of a <tt>char []</tt>;</li>
+    = ...;</tt> (if the initializer is a compile-time constant);</li>
 <li>use <tt>std::vector</tt> or some other suitable container type;
     or</li>
 <li>allocate the array on the heap instead using <tt>new Type[]</tt> -
@@ -762,18 +759,18 @@
 <!-- ======================================================================= -->
 
 <p>Due to a bug in its implementation, GCC allows implicit downcasts
-(from base class to a derived class) when calling functions. Such code is
-inherently unsafe, since the object might not actually be an instance
-of the derived class, and is rejected by Clang. For example, given
-this code:</p>
+of Objective-C pointers (from a base class to a derived class) when
+calling functions. Such code is inherently unsafe, since the object
+might not actually be an instance of the derived class, and is
+rejected by Clang. For example, given this code:</p>
 
 <pre>
 @interface Base @end
 @interface Derived : Base @end
 
-void f(Derived *);
-void g(Base *base) {
-  f(base);
+void f(Derived *p);
+void g(Base *p) {
+  f(p);
 }
 </pre>
 
@@ -781,11 +778,11 @@
 
 <pre>
 downcast.mm:6:3: error: no matching function for call to 'f'
-  f(base);
+  f(p);
   ^
 downcast.mm:4:6: note: candidate function not viable: cannot convert from
       superclass 'Base *' to subclass 'Derived *' for 1st argument
-void f(Derived *);
+void f(Derived *p);
      ^
 </pre>
 
@@ -798,13 +795,17 @@
 </pre>
 
 <!-- ======================================================================= -->
-<h3 id="Use of class as method name">Use of class as method name</h3>
+<h3 id="class-as-property-name">Using <code>class</code> as a property name</h3>
 <!-- ======================================================================= -->
 
-<p>Use of 'class' name to declare a method is allowed in objective-c++ mode to
-be compatible with GCC. However, use of property dot syntax notation to call
-this method is not allowed in clang++, as [I class] is a suitable syntax that 
-will work. So, this test will fail in clang++.
+<p>In C and Objective-C, <code>class</code> is a normal identifier and
+can be used to name fields, ivars, methods, and so on.  In
+C++, <code>class</code> is a keyword.  For compatibility with existing
+code, Clang permits <code>class</code> to be used as part of a method
+selector in Objective-C++, but this does not extend to any other part
+of the language.  In particular, it is impossible to use property dot
+syntax in Objective-C++ with the property name <code>class</code>, so
+the following code will fail to parse:</p>
 
 <pre>
 @interface I {
@@ -818,6 +819,7 @@
 @end
 <pre>
 
+<p>Use explicit message-send syntax instead, i.e. <code>[I class]</code>.</p>
 
 </div>
 </body>





More information about the cfe-commits mailing list