Variadic function to find the first matching (string) argument in a larger array
Good stuff!

I only see one big issue (which is actually what's preventing you from using this as a constexpr).

Errors:

UB: Unsequenced modification

matching[mi++] = (str[(SS - 1) - matching[mi]]
         ^^                               ^^


Which value does mi take for that second indexing? The C++ standard says: either the pre or post increment value is legal. You have undefined behavior here.

You can solve this by separating out the mi incrementation as a separate statement. Using the evil comma operator would allow you to do it as a fairly small modification of your existing code:

(
  ((matching[mi] = (str[(SS - 1) - matching[mi]] == values[i])
     ? (matching[mi] - 1) 
     : ((str[0] == values[i]) ? (SS - 2) : (SS - 1))
  ), ++mi), 
...);


This actually makes the constexpr version work!

Style


I think find_first should be a free-floating function, since you already have the [] accessors. 
I would definitely try to format that fold expression in a more readable manner. See my version of it above for an example.


Improvements


Add a template deduction guide:


Something like this:

template&lt;typename T, size_t LEN&gt;
buffer(const T(&amp;)[LEN]) -&gt; buffer&lt;T, LEN&gt;;


So then your declare buffers in a cleaner manner, and have the buffer be perfectly sized:

buffer&lt;char, 256&gt; b { "find mefind me:gehoehgioewghowieanother string:" };
//becomes
buffer b { "find mefind me:gehoehgioewghowieanother string:" };