Subject: pkg/25729: Semantic errors in code prevent devel/astyle from compiling with gcc 3.4.0
To: None <gnats-bugs@gnats.NetBSD.org>
From: None <shannonjr@netbsd.org>
List: pkgsrc-bugs
Date: 05/27/2004 10:40:40
>Number:         25729
>Category:       pkg
>Synopsis:       Semantic errors in code prevent devel/astyle from compiling with gcc 3.4.0
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu May 27 16:41:00 UTC 2004
>Closed-Date:
>Last-Modified:
>Originator:     John  R. Shannon
>Release:        NetBSD 2.0_BETA
>Organization:
	netbsd.org
>Environment:
System: NetBSD colleen.internal.johnrshannon.com 2.0_BETA NetBSD 2.0_BETA (KERNEL) #0: Mon May 24 05:31:10 MDT 2004 root@colleen.internal.johnrshannon.com:/usr/obj/usr/src/sys/arch/i386/compile/KERNEL i386
Architecture: i386
Machine: i386
>Description:
	g++ -Wall -Wno-sign-compare -O2 -O2 -c astyle_main.cpp
	astyle_main.cpp: In function `bool parseOptions(astyle::ASFormatter&, const ITER&, const ITER&, const std::string&)':
	astyle_main.cpp:178: error: there are no arguments to `parseOption' that depend on a template parameter, so a declaration of `parseOption' must be available
	astyle_main.cpp:178: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
	astyle_main.cpp:183: error: there are no arguments to `parseOption' that depend on a template parameter, so a declaration of `parseOption' must be available
	astyle_main.cpp:188: error: there are no arguments to `parseOption' that depend on a template parameter, so a declaration of `parseOption' must be available
	astyle_main.cpp: At global scope:
	astyle_main.cpp:654: warning: ISO C++ forbids declaration of `main' with no type

	The error comes from parseOptions being a function template rather than a function. parseOptions
	also has problems in that it contains a forward referece to parseOption().

>How-To-Repeat:
	
>Fix:

	The following fix changes parseOptions from a function template to a function. This
	is possible because parseOptions is only used with vector<string> for the template
	parameter.

$NetBSD$

--- astyle_main.cpp.orig	2001-01-20 17:02:14.000000000 -0700
+++ astyle_main.cpp
@@ -150,49 +150,6 @@ void error(const char *why, const char* 
 }
 
 
-
-template<class ITER>
-bool parseOptions(ASFormatter &formatter,
-                  const ITER &optionsBegin,
-                  const ITER &optionsEnd,
-                  const string &errorInfo)
-{
-    ITER option;
-    bool ok = true;
-    string arg, subArg;
-
-    for (option = optionsBegin; option != optionsEnd; ++option)
-    {
-        arg = *option; //string(*option);
-
-        if (arg.COMPARE(0, 2, string("--")) == 0)
-            ok &= parseOption(formatter, arg.substr(2), errorInfo);
-        else if (arg[0] == '-')
-        {
-            int i;
-
-            for (i=1; i < arg.length(); ++i)
-            {
-                if (isalpha(arg[i]) && i > 1)
-                {
-                    ok &= parseOption(formatter, subArg, errorInfo);
-                    subArg = "";
-                }
-                subArg.append(1, arg[i]);
-            }
-            ok &= parseOption(formatter, subArg, errorInfo);
-            subArg = "";
-        }
-        else
-        {
-            ok &= parseOption(formatter, arg, errorInfo);
-            subArg = "";
-        }
-    }
-
-    return ok;
-}
-
 void manuallySetJavaStyle(ASFormatter &formatter)
 {
     formatter.setJavaStyle();
@@ -417,9 +374,50 @@ bool parseOption(ASFormatter &formatter,
     return true; //o.k.
 }
 
+typedef vector<string> string_vector;
+
+bool parseOptions(ASFormatter &formatter,
+                  const string_vector::iterator optionsBegin,
+                  const string_vector::iterator optionsEnd,
+                  const string &errorInfo)
+{
+    string_vector::iterator option;
+    bool ok = true;
+    string arg, subArg;
+
+    for (option = optionsBegin; option != optionsEnd; ++option)
+    {
+        arg = *option; //string(*option);
+
+        if (arg.COMPARE(0, 2, string("--")) == 0)
+            ok &= parseOption(formatter, arg.substr(2), errorInfo);
+        else if (arg[0] == '-')
+        {
+            int i;
+
+            for (i=1; i < arg.length(); ++i)
+            {
+                if (isalpha(arg[i]) && i > 1)
+                {
+                    ok &= parseOption(formatter, subArg, errorInfo);
+                    subArg = "";
+                }
+                subArg.append(1, arg[i]);
+            }
+            ok &= parseOption(formatter, subArg, errorInfo);
+            subArg = "";
+        }
+        else
+        {
+            ok &= parseOption(formatter, arg, errorInfo);
+            subArg = "";
+        }
+    }
 
+    return ok;
+}
 
-void importOptions(istream &in, vector<string> &optionsVector)
+void importOptions(istream &in, string_vector &optionsVector)
 {
     char ch;
     string currentToken;
@@ -653,8 +651,8 @@ void printHelpAndExit()
 main(int argc, char *argv[])
 {
     ASFormatter formatter;
-    vector<string> fileNameVector;
-    vector<string> optionsVector;
+    string_vector fileNameVector;
+    string_vector optionsVector;
     string optionsFileName = "";
     string arg;
     bool ok = true;
@@ -721,7 +719,7 @@ main(int argc, char *argv[])
             ifstream optionsIn(optionsFileName.c_str());
             if (optionsIn)
             {
-                vector<string> fileOptionsVector;
+                string_vector fileOptionsVector;
                 importOptions(optionsIn, fileOptionsVector);
                 ok = parseOptions(formatter,
                                   fileOptionsVector.begin(),
>Release-Note:
>Audit-Trail:
>Unformatted: