How can I convince emacs C++ mode than my less than isn't a template parameter? -
this problem has annoyed me years, , i'm wondering if has had solution. problem in c++ mode, seems emacs cant decide if < operator "less than" or "begin template parameters", messes auto-indent feature. consider this:
bool foo() { return x < y && y < z; } that y way on right , if run c-set-offset (with c-c c-o) on line y < z, tells me current line offset template-args-cont. worst part code below this, including other functions, have totally screwed tabbing. manually space beginning of next function.
edit: confirm, following code indents correctly:
bool foo() { return x == y && y == z; } edit 2: have custom style , offset stuff, starting emacs -q ignore .emacs file shows same problem. i'm using version:
gnu emacs 24.1.1 (x86_64-apple-darwin, ns apple-appkit-1038.36) of 2012-06-10 on bob.porkrind.org on mac os x 10.8 i'm sure i've seen same problem on ubuntu, i'd have go double check versions.
has found solution this? corey discovered adding parens (x < y) workaround.
this looks more c++ issue of cc-mode. latter use smarter heuristics handle simpler issues, yours, in general less-than/template-open conflict hard solve without knowing if x template.
consider following code:
#include <iostream> using std::cout; #ifdef template template <int i> int x(int arg) { return + arg; } #else int x = -1; #endif int main(int argc, char** argv) { const int y = 0; int foo = 1, bar = 2; cout << (x < y && 10 > (foo + bar)) << '\n'; return 0; } it prints 3 if #define template source , 1 otherwise, , should break cout << ... line @ &&-op there's no way figure out proper indentation unless know exact build environment file.
Comments
Post a Comment